如何从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
相关产品推荐
相关产品推荐

