Android:当有一个空白的editText字段时,我的应用程序崩溃了
Posted
技术标签:
【中文标题】Android:当有一个空白的editText字段时,我的应用程序崩溃了【英文标题】:Android : My app crashes when there is a blank editText field 【发布时间】:2012-02-21 21:59:14 【问题描述】:我的代码有问题。 当我有一个空白的 editText 字段时,它一直在崩溃。 这段代码在我的应用程序的设置中,可以正常工作,但是当有一个空白字段时,它会使程序崩溃。 这是它的代码。 请不要苛刻,因为这是我的第一个 android 应用程序。因此,如果有人知道如何解决空白编辑文本字段问题,将不胜感激! (任何其他关于如何改进应用程序的 cmets 都会有所帮助)。
干杯
package com.cleanyet.cyv100fp;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class sTasks extends Activity
@Override
protected void onCreate(Bundle savedInstanceState)
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.tasks);
/*Sets Up the Variables*/
Button done = (Button) findViewById(R.id.done1);
EditText t1 = (EditText)findViewById(R.id.tbTask1);
EditText t2 = (EditText)findViewById(R.id.tbTask2);
EditText t3 = (EditText)findViewById(R.id.tbTask3);
EditText t4 = (EditText)findViewById(R.id.tbTask4);
EditText t5 = (EditText)findViewById(R.id.tbTask5);
String FILENAME1 = "stask1";
String FILENAME2 = "stask2";
String FILENAME3 = "stask3";
String FILENAME4 = "stask4";
String FILENAME5 = "stask5";
String task1 = null;
String task2 = null;
String task3 = null;
String task4 = null;
String task5 = null;
String edit = "Edit Task";
/*Fixes the Blank Field bug*/
/*Sets up the file input*/
FileInputStream fis = null;
/*Gets the tasks set previously*/
/*Task 1 set up*/
try
fis = openFileInput(FILENAME1);
byte[] dataArray = new byte[fis.available()];
while (fis.read(dataArray) != -1)
task1 = new String(dataArray);
catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
finally
try
fis.close();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
if (task1.toString().length() < 0)
task1.toString();
t1.setText(task1);
else
t1.setText(edit);
/*Task 2 set up*/
try
fis = openFileInput(FILENAME2);
byte[] dataArray = new byte[fis.available()];
while (fis.read(dataArray) != -1)
task2 = new String(dataArray);
catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
finally
try
fis.close();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
if (task2.toString().length() < 0)
task2.toString();
t2.setText(task2);
else
t2.setText(edit);
/*Task 3 set up*/
try
fis = openFileInput(FILENAME3);
byte[] dataArray = new byte[fis.available()];
while (fis.read(dataArray) != -1)
task3 = new String(dataArray);
catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
finally
try
fis.close();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
if (task3.toString().length() < 0)
task3.toString();
t3.setText(task3);
else
t3.setText(edit);
/*Task 4 set up*/
try
fis = openFileInput(FILENAME4);
byte[] dataArray = new byte[fis.available()];
while (fis.read(dataArray) != -1)
task4 = new String(dataArray);
catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
finally
try
fis.close();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
if (task4.toString().length() < 0)
task4.toString();
t4.setText(task4);
else
t4.setText(edit);
/*Task 5 set up*/
try
fis = openFileInput(FILENAME5);
byte[] dataArray = new byte[fis.available()];
while (fis.read(dataArray) != -1)
task5 = new String(dataArray);
catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
finally
try
fis.close();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
if (task5.toString().length() < 0)
task5.toString();
t5.setText(task5);
else
t5.setText(edit);
/*When changes have been made and done is clicked*/
done.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
// TODO Auto-generated method stub
/*Sets up the Variables*/
EditText t1 = (EditText)findViewById(R.id.tbTask1);
EditText t2 = (EditText)findViewById(R.id.tbTask2);
EditText t3 = (EditText)findViewById(R.id.tbTask3);
EditText t4 = (EditText)findViewById(R.id.tbTask4);
EditText t5 = (EditText)findViewById(R.id.tbTask5);
String tasks1 = t1.getText().toString();
String tasks2 = t2.getText().toString();
String tasks3 = t3.getText().toString();
String tasks4 = t4.getText().toString();
String tasks5 = t5.getText().toString();
String FILENAME1 = "stask1";
String FILENAME2 = "stask2";
String FILENAME3 = "stask3";
String FILENAME4 = "stask4";
String FILENAME5 = "stask5";
String task1 = tasks1;
String task2 = tasks2;
String task3 = tasks3;
String task4 = tasks4;
String task5 = tasks5;
String edit = "Go to settings to make this task.";
if (t1 != null)
t1.setText(edit);
/*t2.setText(edit);
t3.setText(edit);
t4.setText(edit);
t5.setText(edit);*/
;
/*Put if statement here to catch the empty field*/
/*Makes The Changes to the Tasks*/
try
FileOutputStream fos1 = openFileOutput(FILENAME1, Context.MODE_PRIVATE);
fos1.write(task1.getBytes());
fos1.close();
catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
try
FileOutputStream fos2 = openFileOutput(FILENAME2, Context.MODE_PRIVATE);
fos2.write(task2.getBytes());
fos2.close();
catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
try
FileOutputStream fos3 = openFileOutput(FILENAME3, Context.MODE_PRIVATE);
fos3.write(task3.getBytes());
fos3.close();
catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
try
FileOutputStream fos4 = openFileOutput(FILENAME4, Context.MODE_PRIVATE);
fos4.write(task4.getBytes());
fos4.close();
catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
try
FileOutputStream fos5 = openFileOutput(FILENAME5, Context.MODE_PRIVATE);
fos5.write(task5.getBytes());
fos5.close();
catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
startActivity(new Intent("com.checkin.cyv100fp.settings"));
);
【问题讨论】:
堆栈跟踪会很有帮助... 所以...这是一大块代码。什么是异常,它在哪里被抛出? 对您的应用的建议:在您可以随时重复操作时使用循环。它使您的代码更具可读性,更容易修改,以及这样的 我会按照这里其他人的建议作为初学者。如果设置断点并逐行遍历文件以查看导致异常的确切行,您也可以做另一件事。 【参考方案1】:if (task1.toString().length() < 0)
task1.toString();
t1.setText(task1);
else
t1.setText(edit);
以上说的毫无意义。
首先task1
是一个字符串,因此无需调用toString()
将其转换为一个。
其次,您的条件语句 (if
) 正在检查 task1
的长度是否小于零……考虑一下。
第三,如果它确实有一个不可能的长度小于零,那么你再次调用toString()
(没有变量来接收不可能小于零的结果)然后你尝试设置你的文本t1
EditText
.
您的文件读取可能失败(可能是因为您稍后仅在 onClick(...)
方法中保存字符串)。因为如果文件读取失败,您的task
字符串将为null
,那么您需要在尝试使用它们之前测试null
。
换句话说,您正在代码中执行此操作...
String task1 = null;
要修复我在开头附上的那段代码,请使用...
if (task1 != null)
t1.setText(task1);
else
t1.setText(edit);
...但最重要的是,确保您的文件中包含您需要读取的字符串。
【讨论】:
感谢 MisterSqunok!我知道我以前哪里出错了。它没有解决问题,但确实解决了其他问题之一哈哈再次感谢:)以上是关于Android:当有一个空白的editText字段时,我的应用程序崩溃了的主要内容,如果未能解决你的问题,请参考以下文章
EditText常用属性:空白提示/文本域/特殊字符/数字类型/等属性设置
Android - 不自动选择 EditText 字段[重复]