开发者社区> 问答> 正文

Volley Response Issue Android

我正在解析一个简单的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

展开
收起
montos 2020-03-21 21:57:39 1058 0
1 条回答
写回答
取消 提交回答
  • 发生这种情况是因为在某些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

    2020-03-21 21:58:37
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载