单击按钮后我的应用程序不断崩溃
My app keeps crashing after I click a button
我一直在自己编写一个应用程序,但每次单击一个按钮时都会 运行 遇到一些问题(因为问题出在它的 OnCreate 方法中)。我已将范围缩小到我认为的原因,似乎是这一行:
int desitky_tom = Integer.parseInt(et_tom.getText().toString());
我想将 et_tom 变量从我从 editText
收到的 String
更改为 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.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;
您需要将整数解析包含在 try/catch 块中以避免 NumberFormatException
例如:
int desitky_tat = 0;
try {
desitky_tat = Integer.parseInt(et_tat.getText().toString());
} catch (NumberFormatException e) {
//handle exception - if required
}
它崩溃的原因是因为您的 EditText
在按下按钮时可能有空文本或非数字文本,从而导致应用程序崩溃。
根据您的 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()); }
除了循环输入并确保输入的文本仅来自数字数组之外。
我一直在自己编写一个应用程序,但每次单击一个按钮时都会 运行 遇到一些问题(因为问题出在它的 OnCreate 方法中)。我已将范围缩小到我认为的原因,似乎是这一行:
int desitky_tom = Integer.parseInt(et_tom.getText().toString());
我想将 et_tom 变量从我从 editText
收到的 String
更改为 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.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;
您需要将整数解析包含在 try/catch 块中以避免 NumberFormatException
例如:
int desitky_tat = 0;
try {
desitky_tat = Integer.parseInt(et_tat.getText().toString());
} catch (NumberFormatException e) {
//handle exception - if required
}
它崩溃的原因是因为您的 EditText
在按下按钮时可能有空文本或非数字文本,从而导致应用程序崩溃。
根据您的 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()); }
除了循环输入并确保输入的文本仅来自数字数组之外。