Android Java:RecyclerView中获取含嵌套数组的JSONObject数据失败求助
解决JSON解析中"answer_details"找不到的问题
问题场景
从API获取JSON数据并在RecyclerView展示时,解析抛出JSONException: No value for answer_details错误。
JSON数据示例
{"data": [{"question_id": 1,"sender_id": 27,"receiver_id": 14,"sender_time": "2022-12-30 06:11:28","question": "from user 30-12-2022","answer_details": [{"answer": "from ADMIN 30-12-2022","answer_id": 1,"isAdmin": true},{"answer": "from Users Again ","answer_id": 1,"isAdmin": false}],"sender_name": "Rahul","rating": 0,"subject": "Study","subject_id": 0,"receiver_name": "xcft Nth"}],"message": "Chat getting successfully","status": 200}
出错代码
JSONArray dataArray = jsonObject.getJSONArray("data"); for (int i = 0; i < dataArray.length(); i++) { JSONObject o = new JSONObject(dataArray.get(i).toString()); listOf_users_models.add(new ListOf_Users_Model(o.getInt("sender_id"),o.getInt("receiver_id"),o.getInt("question_id"),o.getString("sender_time"),o.getString("sender_name"),o.getString("subject"),o.getString("receiver_name"),o.getString("question"))); // 错误行 JSONArray dataArray2 = jsonObject.getJSONArray("answer_details"); for (int ii = 0; ii < dataArray2.length(); ii++) { Log.d("dataArray2",dataArray2.toString()); JSONObject o2 = new JSONObject(dataArray2.get(ii).toString()); listOf_users_models.add(new ListOf_Users_Model(o2.getString("answer"),o2.getInt("answer_id"),o2.getBoolean("isAdmin"))); } }
错误信息
W/System: A resource failed to call close. W/System.err: org.json.JSONException: No value for answer_details W/System.err: at org.json.JSONObject.get(JSONObject.java:398) W/System.err: at org.json.JSONObject.getJSONArray(JSONObject.java:593)
错误原因
answer_details数组是嵌套在data数组的每个子JSONObject中的,而代码里错误地从根JSONObject(jsonObject)中获取这个数组,根对象中不存在该字段,因此抛出找不到值的异常。
修正后的代码
将获取answer_details的对象从根jsonObject改为当前循环的子对象o即可:
JSONArray dataArray = jsonObject.getJSONArray("data"); for (int i = 0; i < dataArray.length(); i++) { JSONObject o = new JSONObject(dataArray.get(i).toString()); listOf_users_models.add(new ListOf_Users_Model(o.getInt("sender_id"),o.getInt("receiver_id"),o.getInt("question_id"),o.getString("sender_time"),o.getString("sender_name"),o.getString("subject"),o.getString("receiver_name"),o.getString("question"))); // 修改这里:从当前子对象o中获取answer_details JSONArray dataArray2 = o.getJSONArray("answer_details"); for (int ii = 0; ii < dataArray2.length(); ii++) { Log.d("dataArray2",dataArray2.toString()); JSONObject o2 = new JSONObject(dataArray2.get(ii).toString()); listOf_users_models.add(new ListOf_Users_Model(o2.getString("answer"),o2.getInt("answer_id"),o2.getBoolean("isAdmin"))); } }
内容的提问来源于stack exchange,提问作者Mediad
相关产品推荐
相关产品推荐

