我正在解析一个简单的JSON响应,并且在尝试解析雇主名称时它可以正常工作,但是到了最终崩溃的地步,并说我的“ review” json对象为空。这是响应:https : //raw.githubusercontent.com/vikrama/feed-json-sample/master/feed.json
这是我的阅读方式:
private void extractName()
{
RequestQueue queue = Volley.newRequestQueue(this);
JsonObjectRequest request = new JsonObjectRequest(JSON_URL, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject gimme = response.getJSONObject("response");
JSONArray resultsArray = gimme.getJSONArray("results");
for(int i = 0; i < resultsArray.length(); i++)
{
JSONObject info = resultsArray.getJSONObject(i);
JSONObject review = info.getJSONObject("review");
Log.d("COMP NAME", review.getString("employerName"));
companyNames.add(review.getString("employerName"));
}
recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
adapter = new CompanyAdapter(MainActivity.this, companyNames);
recyclerView.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage());
}
});
queue.add(request);
}
调试行将打印正确的值,然后突然停止说“没有可供检查的值”。我对此很困惑,因为似乎我正在正确读取数据。(使用https://jsonformatter.org/json-viewer更好地格式化我上面列出的json)
另外,recyclerview中的其他所有内容均已正确设置,并且在我的主要活动的onCreate()方法中调用了extractName()方法。
问题来源:Stack Overflow
发生这种情况是因为在某些JSON对象中您没有“审阅”对象,因此它直接抛出代码以捕获Exception。
为了克服这个问题,请使用:
if(info.has("review")) {
JSONObject review = info.getJSONObject("review");
companyNames.add(review.getString("employerName"));
}
代替:
JSONObject review = info.getJSONObject("review");
Log.d("COMP NAME", review.getString("employerName"));
companyNames.add(review.getString("employerName"));
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。