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

如何从JSON中获取子分类数据?Android Volley解析报错求助

问题原因

解析逻辑没有匹配JSON的实际层级,漏了两层结构的读取:

  • 遍历server数组得到的server对象本身不存储name/premium/total字段,它的内部仅包含一个名为data的JSONArray
  • 代码中直接调用data.getXxx()读取字段,但data对象从未被正确声明赋值,实际用户字段全部存放在data数组的子JSONObject中
  • 附带逻辑问题:循环内重复创建Adapter、给RecyclerView设置Adapter属于无效性能损耗,数据全部解析完成后统一刷新UI即可。
修复代码

替换onResponse方法内try块的逻辑为以下内容:

try {
    usersModelList.clear();
    JSONArray serverArray = response.getJSONArray("server");
    for (int i = 0; i < serverArray.length(); i++) {
        JSONObject serverItem = serverArray.getJSONObject(i);
        JSONArray dataArray = serverItem.getJSONArray("data");
        for (int j = 0; j < dataArray.length(); j++) {
            JSONObject dataItem = dataArray.getJSONObject(j);
            String name = dataItem.getString("name");
            boolean premium = dataItem.getBoolean("premium");
            int total = dataItem.getInt("total");
            usersModelList.add(new UsersModel(name, premium, total));
        }
    }
    if (recyclerUsers.getAdapter() == null) {
        recyclerUsers.setAdapter(new UsersAdapter(getApplicationContext(), usersModelList));
    } else {
        recyclerUsers.getAdapter().notifyDataSetChanged();
    }
} catch (JSONException e) {
    e.printStackTrace();
}

替换后即可正常读取到data数组下的字段,不会再抛出No value for xxx的异常。如果后续接口返回的server或data有可能为空,可以在取数组前加isNull()判断避免运行时异常。


内容的提问来源于stack exchange,提问作者zigg-zigg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:57:23