安卓货币转换器点击转换按钮触发FATAL错误应用闪退问题求助
问题根因
看报错栈的底层异常android.content.res.Resources$NotFoundException: String resource ID #0x3a98,问题出在setText调用环节,和Integer.parseInt无关。
安卓TextView(EditText是它的子类)的setText方法有两个常用重载:
- 接收
CharSequence类型参数:用于直接设置要显示的文本内容 - 接收
int类型参数:系统会把这个int当成安卓资源ID,去资源文件里找对应ID的字符串展示
你在计算完结果后,直接把强转后的int类型数值传给了setText,系统误以为你传入的是字符串资源ID,找不到对应资源就抛出了异常,导致应用崩溃。
修复方案
把要设置的数值转为字符串类型再传给setText即可,同时建议增加输入非空判断,避免空输入时parseInt也触发崩溃,修正后的converter方法如下:
public void converter(View view) { int rate = 15000; EditText LBP = (EditText) findViewById(R.id.LBP); EditText Dollar = (EditText) findViewById(R.id.Dollar); if (LBP.isEnabled()) { String lbpText = LBP.getText().toString().trim(); if (lbpText.isEmpty()) { Toast.makeText(this, "请输入LBP金额", Toast.LENGTH_SHORT).show(); return; } int LBPAmount = Integer.parseInt(lbpText); double DollarResult = LBPAmount / rate; // 把计算结果转为字符串再设置到输入框 Dollar.setText(String.valueOf((int) DollarResult)); } else if (Dollar.isEnabled()) { String dollarText = Dollar.getText().toString().trim(); if (dollarText.isEmpty()) { Toast.makeText(this, "请输入美元金额", Toast.LENGTH_SHORT).show(); return; } int DollarAmount = Integer.parseInt(dollarText); double LBPResult = DollarAmount * rate; // 把计算结果转为字符串再设置到输入框 LBP.setText(String.valueOf((int) LBPResult)); } }
内容的提问来源于stack exchange,提问作者Clark Rouhana
相关产品推荐
相关产品推荐

