Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 截击反应问题_Java_Android_Json - Fatal编程技术网

Java 截击反应问题

Java 截击反应问题,java,android,json,Java,Android,Json,我正在解析一个简单的JSON响应,当试图解析雇主名称时,它是有效的,但它最终会崩溃,并说我的“review”JSON对象是空的。以下是答复: 我是这样读的: private void extractName() { RequestQueue queue = Volley.newRequestQueue(this); JsonObjectRequest request = new JsonObjectRequest(JSON_URL, null, new

我正在解析一个简单的JSON响应,当试图解析雇主名称时,它是有效的,但它最终会崩溃,并说我的“review”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);
    }
private void extractName()
{
RequestQueue=Volley.newRequestQueue(this);
JsonObjectRequest=newJSONObjectRequest(JSON_URL,null,new Response.Listener()){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
JSONObject gimme=response.getJSONObject(“response”);
JSONArray resultsArray=gimme.getJSONArray(“结果”);
对于(int i=0;i
调试行打印正确的值,然后突然停止说“no value for review”。我对此感到非常困惑,因为我似乎正确地阅读了数据。(用于更好地格式化上面列出的json)


此外,我的recyclerview中的所有其他内容都已正确设置,并且在我的主要活动的onCreate()方法中调用了extractName()方法。

之所以发生这种情况,是因为在某些JSON对象中没有“review”对象,所以它直接抛出代码以捕获异常

为了克服这个问题,请使用:-

   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"));

一个请求似乎成功了一次,您可以看到log语句,但后续请求返回的结果中没有“review”对象。建议在分配
review
变量之前,放置一个log语句来显示
info
中的内容。这确实发生了,对于没有review对象的结果,我如何排除这些内容?这确实是我在发布此内容之前使用的内容,我感谢您的帮助:)