从EditText获取Int导致错误?

时间:2014-05-03 19:59:04

标签: android android-edittext int

首先,对不起,如果之前已经被问到并回答过,我找不到与我的问题有关的任何内容。

所以我正在为一个大学项目工作,我需要从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); 
}

3 个答案:

答案 0 :(得分:1)

你是否在onCreate()函数中有这个?

 EditText txtMilesTravelled = (EditText) findViewById(R.id.YourEditText);

但我认为你混合了Integerint。它们不一样:

See this link!

答案 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
}

如果这不是问题,,请确保正确定义变量。

txtMilesTravelledtxtFuelUsed应为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));