java - 单击按钮后我的应用程序崩溃
问题描述
我对 android 开发非常陌生,具有少量 Java 编程知识。我需要帮助!我正在制作一个应用程序,允许您输入您花费的金额并计算您可以花费多少。它还跟踪您留在文本文件中的预算。它是在 android studio 中使用 Java 制作的。
这是我的错误信息:
2019-03-03 09:42:14.245 4178-4178/? E/SPPClientService: [PackageInfoChangeReceiver] [handlePkgRemovedEvent] PackageName : com.concretegames.budgettracker, true, false
2019-03-03 09:42:27.573 16961-16961/com.concretegames.budgettracker E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.concretegames.budgettracker, PID: 16961
java.lang.NumberFormatException: s == null
at java.lang.Integer.parseInt(Integer.java:570)
at java.lang.Integer.parseInt(Integer.java:643)
at com.concretegames.budgettracker.MainActivity$1.onClick(MainActivity.java:56)
at android.view.View.performClick(View.java:6935)
at android.widget.TextView.performClick(TextView.java:12738)
at android.view.View$PerformClick.run(View.java:26211)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:7000)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
这是我的代码:
package com.concretegames.budgettracker;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import static java.lang.System.out;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView response = findViewById(R.id.response);
final Button calc = findViewById(R.id.Calculate);
Context context = this;
String filepath = "total_expense.txt";
String filestoragepath = "MyFileStorage";
final File edit_file = new File(getExternalFilesDir(filestoragepath), filepath);
EditText $box = findViewById(R.id.expenses);
final String $ = $box.getText().toString();
calc.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (edit_file.exists() && !edit_file.isDirectory()) {
try {
FileReader fr = new FileReader(edit_file);
BufferedReader br = new BufferedReader(fr);
String str;
while ((str = br.readLine()) != null) {
out.println(str + "\n");
}
br.close();
int result = Integer.parseInt(str) - Integer.parseInt($);
FileWriter fw = new FileWriter(edit_file);
PrintWriter pw = new PrintWriter(fw);
pw.print("");
pw.print(result);
pw.close();
response.setText("Budget left over: "+result);
} catch (IOException e) {
out.println("ERROR: " + e.toString());
response.setText("ERROR: " + e.toString());
}
} else {
try {
edit_file.createNewFile();
FileWriter fw = new FileWriter(edit_file);
PrintWriter pw = new PrintWriter(fw);
pw.print("1500");
pw.close();
} catch (IOException e) {
out.println("ERROR: " + e.toString());
response.setText("ERROR: " + e.toString());
}
}
}
});
}
}
PS 我只有 13 岁,没有使用 Java 的经验。我更喜欢 HTML、python 和 javascript。任何帮助表示赞赏!
解决方案
如果 Integer.parseInt() 无法成功将 String 解析为 int,则会引发异常。但是抛出的异常是RuntimeException的子类,所以java编译器不会强制你去捕获异常。但仍然强烈建议你抓住它。并且将避免崩溃。通常,在将字符串解析为整数时执行以下操作:
int result;
try {
result = Integer.parseInt(someString);
} catch (NumberFormatException e) {
result = 0;
}
推荐阅读
- java - IntelliJ:错误:无法找到或加载主类
- validation - Joi 使用未知键验证对象
- c++ - 没有为名为 sfml 的 cpp 框架加载“纹理”sf 的错误
- python-3.x - 单个作业存储、单个启动的调度程序和多个只读工作进程
- java - 使用 Azul 安装修复程序后 IntelliJ“错误 = 86,可执行文件中的 CPU 类型错误”?
- python - 当对消息添加反应时,我如何 DM 用户?
- r - R从多个唯一的网址中抓取表格
- mysql - 关于mysql 5.6和mysql 8.0用户变量使用差异的问题
- google-chrome - 用于 JavaScript 的 google chrome 中的实时编辑失败
- python - 无法在 Macos M1 上安装 mediapipe