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

Android RecyclerView适配器赋值后无显示及空指针问题解决

问题分析与解决方案

先看你遇到的两个问题:之前的NullPointerException和现在RecyclerView无数据显示,根源都在JSON解析方法的逻辑错误,还有几处小的拼写问题,咱们一步步解决:

1. 核心问题:JSON解析方法完全写错了

你的jsonParse方法里犯了两个致命错误:

  • 你新建了局部变量list,但循环里却往未初始化的成员变量arrayList里加数据(这就是之前空指针的直接原因,因为arrayList一开始是null);
  • 最终返回的list是空的,导致Adapter拿到的数据集为空,自然界面没内容。

修复后的jsonParse方法:

private ArrayList<News> jsonParse(String s) throws JSONException {
    ArrayList<News> list = new ArrayList<>();
    JSONObject jsonObject = new JSONObject(s);
    JSONArray jsonArray = jsonObject.getJSONArray("articles");
    for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject current = jsonArray.getJSONObject(i);
        String title = current.getString("title");
        String description = current.getString("description");
        String photo = current.getString("urlToImage");
        // 注意这里的拼写错误:原代码是"urt",应该是"url"
        String more = current.getString("url");
        News news = new News(title, description, photo, more);
        // 往局部变量list里添加数据,而不是成员变量arrayList
        list.add(news);
    }
    return list;
}

2. 避免潜在空指针的优化

  • Adapter的getItemCount方法:添加null判断,防止后续如果数据集为空时再次触发空指针:
@Override
public int getItemCount() {
    // 三元表达式处理null情况
    return arrayList != null ? arrayList.size() : 0;
}
  • MainActivity里初始化数据集:在onCreate开头先初始化arrayList,虽然修复解析方法后不是必须,但能让代码更健壮:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 提前初始化arrayList
    arrayList = new ArrayList<>();
    recyclerView = findViewById(R.id.rv);
    // ... 后续代码不变
}

3. 其他需要注意的细节

  • 网络请求的URL里的&amp;其实可以直接写成&,不过OkHttp会自动处理,这个不影响功能,但可读性更好;
  • 确保你的item_row.xml布局里的title、description、image这几个ID和Adapter里findViewById的ID完全一致,避免找不到控件导致无内容;
  • 检查网络权限是否在Manifest里声明:<uses-permission android:name="android.permission.INTERNET" />,没有的话网络请求会失败。

测试验证

修复完这些后,重新运行App:

  1. 网络请求成功后,JSON解析会正确生成包含数据的ArrayList;
  2. Adapter拿到有效的数据集,getItemCount返回正确的数量;
  3. onBindViewHolder会正确绑定数据到每个Item,RecyclerView就能正常显示内容了。

内容的提问来源于stack exchange,提问作者Tanishq Saluja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:47:40