Fragment中结合AsyncTask使用RecyclerView遇Resources$NotFoundException错误求助
解决Fragment中AsyncTask+RecyclerView出现的Resources$NotFoundException错误
嘿,这个问题我之前踩过坑,其实原因非常明确,咱们一步步来解决:
错误根源分析
你看到的android.content.res.Resources$NotFoundException: String resource ID #0x67b,本质是调用TextView.setText()时传入了整数类型的值——Android会默认把这个整数当成字符串资源的ID去strings.xml里查找,但你的项目里根本没有这个ID对应的字符串资源,自然就抛出异常了。
结合你的场景(Fragment里用AsyncTask加载数据给RecyclerView的Adapter),大概率是在onBindViewHolder方法里,你直接把某个数值类型的数据(比如AsyncTask返回的int/long字段)传给了setText,比如写出了这样的代码:
// 错误示例:直接传入int类型数据 holder.myTextView.setText(item.getCount()); // item.getCount()返回int
修复方案
只需要把数值类型的数据转换成字符串再传入setText即可,有两种常用方式:
- 使用
String.valueOf()方法转换
// 正确写法:转成字符串后设置 holder.myTextView.setText(String.valueOf(item.getCount()));
- 用空字符串拼接实现转换
// 另一种正确写法 holder.myTextView.setText(item.getCount() + "");
排查步骤
- 打开报错提示里的
MyFragment.java,定位到第156行(也就是onBindViewHolder里触发错误的那行) - 检查传入
setText()的参数类型:如果是int/long这类数值类型,按照上面的方法转成字符串 - 如果你确实是想加载字符串资源ID,那要确认这个ID对应的字符串在
res/values/strings.xml中存在,检查是否打错了资源名称或ID
内容的提问来源于stack exchange,提问作者Bububs
相关产品推荐
相关产品推荐

