Android中向TextView的setText()传入int值抛出异常问题咨询
为什么TextView调用setText(int)会抛出Resources$NotFoundException?
这是因为TextView的setText()方法存在多个重载版本,不同参数类型对应完全不同的逻辑:
- 传入字符串类型时,调用的是
setText(CharSequence text),直接将字符串内容显示到TextView上。 - 传入整数类型时,调用的是
setText(int resId),系统会把这个整数当作字符串资源的ID(比如R.string.app_name这类定义在res/values/strings.xml中的资源ID),去查找对应的字符串资源。
而mediaPlayer.getDuration()返回的是音频时长的毫秒数(比如123456),这个数值并不是你项目中定义的有效字符串资源ID,系统找不到匹配的资源,就会抛出android.content.res.Resources$NotFoundException异常。
解决办法
只需把时长数值转换成字符串再传入即可,常见两种实现方式:
- 使用
String.valueOf()转换:
musicDurationTextView.setText(String.valueOf(mediaPlayer.getDuration()));
- 通过字符串拼接自动转换:
musicDurationTextView.setText(mediaPlayer.getDuration() + "");
另外,通常不会直接显示毫秒数,建议将毫秒转换为时分秒格式(如02:03)后再显示,提升用户体验。
内容的提问来源于stack exchange,提问作者user21603351
相关产品推荐
相关产品推荐

