我一直在自己编写应用程序,但是每次单击一个按钮时,它就会遇到一些问题(因为问题出在其OnCreate方法中)。我将其范围缩小到我认为是原因所在,并且似乎是以下一行:
int desitky_tom = Integer.parseInt(et_tom.getText().toString());
我想将et_tom变量从String
收到的editText
更改为int
。这可能是原因吗?如果是,该如何更改应用程序不再崩溃?
这是我的Logcat错误日志:
2019-02-07 16:51:16.272 2794-2794/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mariaspocitadlo, PID: 2794
java.lang.NumberFormatException: For input string: ""
at java.lang.Integer.parseInt(Integer.java:620)
at java.lang.Integer.parseInt(Integer.java:643)
at com.example.mariaspocitadlo.MainActivity$1.onClick(MainActivity.java:41)
at android.view.View.performClick(View.java:6897)
at android.widget.TextView.performClick(TextView.java:12693)
at android.view.View$PerformClick.run(View.java:26101)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
这是其余的代码:
final Button spocitat = (Button) findViewById(R.id.button);
spocitat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//editext Toma na desítky Toma
EditText et_tom = (EditText)findViewById(R.id.editText);
int desitky_tom = Integer.parseInt(et_tom.getText().toString());
TextView txtview = (TextView)findViewById(R.id.textView_tom);
String str = Double.toString(desitky_tom);
txtview.setText(str);
//editext Táty na desítky Táty
EditText et_tat = (EditText)findViewById(R.id.editText2);
int desitky_tat = Integer.parseInt(et_tat.getText().toString());
//editext Kuby na desítky Kuby
EditText et_kub = (EditText)findViewById(R.id.editText3);
int desitky_kub = Integer.parseInt(et_kub.getText().toString());
int desitky_vitez = 0;
int body_tom = 0;
int body_tat = 0;
int body_kub = 0;
int body_viteze = 0;
答案 0 :(得分:0)
您需要将整数分析包含在try / catch块中,以避免NumberFormatException
例如:
int desitky_tat = 0;
try {
desitky_tat = Integer.parseInt(et_tat.getText().toString());
} catch (NumberFormatException e) {
//handle exception - if required
}
它崩溃的原因是因为您的EditText
在按下按钮时可能具有空或非数字文本,从而导致应用崩溃。
答案 1 :(得分:0)
从LogCat判断,输入的字符串为""
。 (LogCat中的第3行)。因此,它不是数字,不能转换为int
。您应该确保输入一个数字,以防止崩溃以try
和catch
包围代码,例如:
try {
EditText et_tom = (EditText)findViewById(R.id.editText);
int desitky_tom = Integer.parseInt(et_tom.getText().toString());
} catch (Exception e) { System.out.println(e.toString()); }
除此之外,还要循环遍历输入,并确保输入的文本仅来自数字数组。