onClick触发increment方法后应用崩溃,调试定位到displayQuantity行报错
运行时崩溃的核心原因
你定位到的displayQuantity方法处的报错,完全源于Android TextView的方法重载匹配陷阱:
- 你在代码里写的
quantityTextView.setText(numberOfCoffees),传入的参数是int类型的整数,系统不会自动把这个整数当文本显示 - 此时系统会优先匹配
setText(int resourceId)这个重载方法,把你传的咖啡数量值(比如1、2、3)当作字符串资源的ID去查找对应配置 - 这类自定义的业务数字根本不会对应到任何系统或项目的字符串资源ID,最终会触发
Resources$NotFoundException: String resource ID #0xX的崩溃,和你调试定位的崩溃位置完全吻合
可直接落地的修复方案
- 最直接的修改方式:把int类型的数量值转成字符串再传入setText方法,修改
displayQuantity里的setText行即可:private void displayQuantity(int numberOfCoffees) { TextView quantityTextView = findViewById(R.id.quantity_text_view); // 修正:把int转成字符串后再设置 quantityTextView.setText(String.valueOf(numberOfCoffees)); } - 可扩展性更强的修改方式:在项目的
strings.xml中定义带数字占位符的展示文本,通过系统的字符串格式化接口传值,方便后续调整展示文案不用改Java代码:// strings.xml配置示例 // <string name="coffee_quantity">已选择 %1$d 杯咖啡</string> quantityTextView.setText(getString(R.string.coffee_quantity, numberOfCoffees));
原有代码逻辑校验
修正后原来的increment方法逻辑不需要做任何调整:
public void increment(View view) { numberOfCoffees = numberOfCoffees + 1; displayQuantity(numberOfCoffees); displayPrice(numberOfCoffees * 5); }
方法里的数值累加、单价计算逻辑本身没有问题,仅需修正setText的参数类型匹配问题即可正常运行。
内容的提问来源于stack exchange,提问作者ga2xb
相关产品推荐
相关产品推荐

