如何在android java中将数字字符串值转换为整数?

时间:2014-01-24 18:27:18

标签: java android

我有这段代码:

 public void display(View view) {
    EditText edC = (EditText) findViewById(R.id.edC);
    TextView tvD = (TextView) findViewById(R.id.tvDisplay);
    try {
        String creditsS = edC.getText().toString();
        int credits = Integer.valueOf(creditsS);
        tvD.setText(credits);   
    } catch(NumberFormatException nfe) {
        tvD.setText("Couldn't parse.");
    }
}

当我运行程序并单击按钮时,应用程序崩溃了。我也试过

int credits = Integer.parseInt(creditsS)

不起作用。哪里有问题?

顺便说一句,我无法打印堆栈跟踪,因为logcat会继续显示无限循环等错误。 谢谢。 :)

2 个答案:

答案 0 :(得分:5)

该应用因此行崩溃:

tvD.setText(credits);

问题是您使用setText()作为参数调用int。该方法被定义为接受int,因此编译器不会抱怨,但这些int应该是字符串资源的ID。如果您使用任意随机setText()致电int,该应用会尝试使用该ID找到字符串资源,并在执行此操作时与Resources$NotFoundException崩溃。< / p>

只需将该行更改为以下内容:

tvD.setText("" + credits);

答案 1 :(得分:1)

由于您尚未发布StackTrace,因此解决您的问题可能会变得棘手。
正如@FD_在他的回答中所解释的那样,你得到了一个毫无瑕疵的例外 作为一项很好的预防措施,您应该trim()所有字符串,然后再通过任何String related Operation/Conversion
您应该像这样编辑代码:

public void display(View view) {
EditText edC = (EditText) findViewById(R.id.edC);
TextView tvD = (TextView) findViewById(R.id.tvDisplay);
try {
    String creditsS = edC.getText().toString().trim();
    int credits = Integer.parseInt(creditsS);
    tvD.setText(""+credits);   
} catch(NumberFormatException nfe) {
    tvD.setText("Couldn't parse.");
    nfe.printStackTrace();
}
catch(Exception e) {
    e.printStackTrace();
}
}

我希望这会有所帮助。