我有一个问题,我无法解决,老师的解决方案也不起作用。
问题是当我点击“检查答案”并且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" />
对不起我的英语。提前谢谢。
答案 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