我有这段代码:
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会继续显示无限循环等错误。 谢谢。 :)
答案 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();
}
}
我希望这会有所帮助。