You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Retrofit获取数据绑定到RecyclerView适配器时App崩溃如何解决?

问题根源

最直接的崩溃原因在adapter.java的onBindViewHolder方法中:

holder.t1.setText((int) data.get(position).getId());

你将id强转成int类型后直接传给setText(),Android的TextView.setText(int resId)重载会把传入的int值当成字符串资源ID,去res/values/strings.xml中查找对应资源,找不到匹配ID的资源就会抛出Resources.NotFoundException触发崩溃。

修复方案

1. 修复适配器赋值逻辑

把数值类型的id转成字符串后再传给setText,两种写法均可:

// 写法1:显式转字符串
holder.t1.setText(String.valueOf((int) data.get(position).getId()));
// 写法2:拼接文本转字符串
holder.t1.setText("序号: " + (int) data.get(position).getId());

2. 可选优化(规避后续潜在问题)

  • 补全Retrofit BaseUrl后缀斜杠:retrofitInstance.java中的baseUrl末尾需要加/,避免路径拼接出错:
    private static final String commonURL = "https://jsonplaceholder.typicode.com/";
    
  • 优化数据模型字段类型:接口返回的userId、id本身是整型,直接用int/long接收更合理,避免浮点型精度问题:
    // 修改jsonData.java的字段定义,同步修改对应getter、setter的返回值、入参类型
    private int userId;
    private int id;
    
  • 优化适配器初始化逻辑:不需要每次拿到数据都新建适配器,可以在onCreate中先初始化空适配器绑定给RecyclerView,拿到数据后更新数据集再调用notifyDataSetChanged()即可,性能更好。

3. Logcat无报错排查

如果后续仍看不到崩溃日志,检查Logcat过滤设置:

  • 顶部过滤级别选择Error
  • 过滤条件选择Show only selected application
  • 确认当前选中的进程是你的App对应的包名

内容的提问来源于stack exchange,提问作者Saher Ikram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:57:03