当EditText为空时,Android应用程序崩溃

时间:2016-10-08 12:48:59

标签: java android android-studio

我有一个问题,我无法解决,老师的解决方案也不起作用。

问题是当我点击“检查答案”并且EditText中没有写入任何内容时,程序崩溃了。我在Android Studio工作。

Java代码:

public class Main extends AppCompatActivity {
    int a, b, c, d;
    Button Enter, NewExercise, EndLesson;
    EditText et;
    TextView tv;
    ImageView iv;
    String st;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);
        et = (EditText) findViewById(R.id.et);
        iv = (ImageView) findViewById(R.id.iv);
        a = (int)(10 * Math.random());
        b = (int)(10 * Math.random());
        c = a + b;
        tv.setText("Exmaple: " + a + " + " + b);
        et.setText("" + c);
    }

    public void Show(View view) {
        a = (int)(10 * Math.random());
        b = (int)(10 * Math.random());
        c = a + b;
        tv.setText("" + a + " + " + b);
        et.setText("");
    }

    public void Check(View view) {
        st = et.getText().toString();
        d = Integer.parseInt(st);
        if(0 == et.length()) {
            Toast.makeText(this,"Please, enter the answer",Toast.LENGTH_LONG).show();
        }
        if (d == c) {
            iv.setImageResource(R.drawable.t);
            Toast.makeText(this, "Right", Toast.LENGTH_LONG).show();
        }
        else {
            Toast.makeText(this, "False", Toast.LENGTH_LONG).show();
            iv.setImageResource(R.drawable.f);
            et.setText("");
        }
    }
}

XML:

<TextView
    android:layout_width="wrap_content"
    android:textSize="30dp"
    android:textColor="#000000"
    android:layout_height="wrap_content"
    android:id="@+id/tv" />

<ImageView
    android:layout_width="match_parent"
    android:layout_height="71dp"
    app:srcCompat="@drawable/eq"
    android:id="@+id/eq" />

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="number"
    android:textSize="30dp"
    android:hint="Enter the answer"
    android:ems="10"
    android:maxLength="3"
    android:gravity="center"
    android:id="@+id/et"
    android:layout_weight="0.13" />

<ImageView
    android:layout_width="match_parent"
    android:layout_height="48dp"
    app:srcCompat="@drawable/t"
    android:id="@+id/iv"
    android:layout_weight="0.12" />

<Button
    android:text= "Check the answer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="Check"
    android:id="@+id/CheckTheAnswer" />

<Button
    android:text= "New Exercise"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="Show"
    android:id="@+id/NewExercise" />

<Button
    android:text="End lesson"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="Exit"
    android:id="@+id/EndLesson" />

对不起我的英语。提前谢谢。

5 个答案:

答案 0 :(得分:1)

那是因为你正在将空字符串(i.e. "")解析为导致崩溃的int。

使用try-catch将String解析为int时应小心处理异常,因为如果String无法解析为int,则会抛出Runtime错误,导致应用程序崩溃。

答案 1 :(得分:0)

如果EditText为空或不使用,请检查EditText:

protected boolean isEmpty(EditText editText) {
        return (editText.getText().toString().equals(""));
    }

希望这有帮助。

答案 2 :(得分:0)

尝试放置一个null检查器。例如:

if(et != null){
  st = et.getText().toString().trim();
       d = Integer.parseInt(st);
}

我还添加了trim()方法来修剪尾随和前导空格。

答案 3 :(得分:0)

感谢您的回答,但只有这个解决方案有效。

if (st.equals(""))
    {
  vbsays.setText("< First, you need to enter something into the text box, and then check your answer. Try!");
    }
    else 
{
        d = Integer.parseInt(st);
}

答案 4 :(得分:0)

getText()的返回类型是可编辑的,因此我们需要使用toString()将其转换为字符串。

from app import Example
//use (instantiate) the class