首先,对不起,如果之前已经被问到并回答过,我找不到与我的问题有关的任何内容。
所以我正在为一个大学项目工作,我需要从EditText小部件中获取int值。我被告知使用parseInt执行此操作但是在运行我的程序时,该行代码会导致应用程序崩溃。我不知道我做错了什么,我仍然是Android开发的新手,谢谢你的帮助:)
public void Calculate (View view)
{
int MilesTravelled;
int FuelUsed;
int MPG;
/* the two lines below are what cause the application to crash */
MilesTravelled = Integer.parseInt(txtMilesTravelled.getText().toString());
FuelUsed = Integer.parseInt(txtFuelUsed.getText().toString());
FuelUsed = (int) (FuelUsed / 4.55);
MPG = MilesTravelled / FuelUsed;
lblMPG.setText(FuelUsed);
}
答案 0 :(得分:1)
你是否在onCreate()函数中有这个?
EditText txtMilesTravelled = (EditText) findViewById(R.id.YourEditText);
但我认为你混合了Integer
和int
。它们不一样:
答案 1 :(得分:1)
首先,不要大写变量或方法名的第一个字母。遵循Java编码约定,只对类进行。
可能导致应用崩溃的原因是您尝试将标签文本设置为整数。 TextView的setText
方法需要接受一个字符串。
所以改变:
lblMPG.setText(FuelUsed);
为:
lblMPG.setText(String.valueOf(FuelUsed));
否则可能是它试图将非数字字符串解析为整数。 例如,如果EditText为空,则会导致您的应用崩溃。为了防止这种情况,请尝试以下方法:
int MilesTravelled = 0, FuelUsed = 0;
try {
MilesTravelled = Integer.parseInt(txtMilesTravelled.getText().toString());
FuelUsed = Integer.parseInt(txtFuelUsed.getText().toString());
} catch (NumberFormatException nfe) {
Toast.makeText(getApplicationContext(), "Error NFE!", 0).show();
nfe.printStackTrace();
}
这样,它将捕获NumberFormatException错误(将字符串解析为不能表示为整数的整数,例如“hello”)。如果它捕获到错误,它将会发生错误,并且整数变量将保持为0。
或者您可以使用以下正则表达式测试字符串是否仅包含数字:
int MilesTravelled = 0, FuelUsed = 0;
if (txtMilesTravelled.getText().toString().matches("[0-9]+")) {
MilesTravelled = Integer.parseInt(txtMilesTravelled.getText().toString());
} else {
// contains characters that are not digits
}
if (txtFuelUsed.getText().toString().matches("[0-9]+")) {
FuelUsed = Integer.parseInt(txtFuelUsed.getText().toString());
} else {
// contains characters that are not digits
}
如果这不是问题,,请确保正确定义变量。
txtMilesTravelled
和txtFuelUsed
应为EditText
:
EditText txtMilesTravelled = (EditText)findViewById(R.id.txtMilesTravelled);
EditText txtFuelUsed = (EditText)findViewById(R.id.txtFuelUsed);
并确保您的R.id.editText
确实存在于您的布局上并且ID是正确的。
最后,确保FuelUsed
在计算MPG
之前不是0,因为那时你除以0:
int MPG = 0;
if (FuelUsed != 0) {
MPG = MilesTravelled / FuelUsed;
}
答案 2 :(得分:1)
我假设你在EditTexts
中输入了完美的整数。在使用trim
之前使用txtMilesTravelled.getText().toString().trim()
函数parseInt
可能是个好主意。
但是,我认为主要问题在于:lblMPG.setText(FuelUsed);
FuelUsed
是一个整数值,当您将整数传递给setText()
时,它会查找具有该整数值的字符串资源。所以你应该将一个String传递给setText()
方法。
使用:lblMPG.setText(Integer.toString(FuelUsed));