com.android.volley.ParseError:org.json.JSONException

时间:2014-01-08 14:06:55

标签: android jackson android-volley

我从排球库中得到了这个错误

@Override
public void onErrorResponse(VolleyError error) {
    error.printStackTrace();
}

错误

com.android.volley.ParseError: org.json.JSONException: Value [{"id":"admin","name":"Admin"}] of type org.json.JSONArray cannot be converted to JSONObject

如何以字符串形式接收结果,然后我将使用jackson处理它?<​​/ p>

4 个答案:

答案 0 :(得分:22)

如果要以字符串形式接收结果,请不要使用JSONRequest。使用简单的Request类。 你的问题非常简单,服务器只返回一个内部只有一个元素的JSONArray。 JSONArray不是JSONObject。这就是解析失败的原因。

答案 1 :(得分:6)

我们必须使用 JsonArrayRequest 而不是 JsonObjectRequest 。代码为:

    RequestQueue queue = Volley.newRequestQueue(this);

    final String url = "http://192.168.88.253/mybazar/get_product_list.php";

    // prepare the Request
    JsonArrayRequest getRequest = new JsonArrayRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONArray>()
            {
                @Override
                public void onResponse(JSONArray response) {
                    // display response
                    Log.d("Response", response.toString());
                }
            },
            new Response.ErrorListener()
            {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("Error.Response", error.toString());
                }
            }
    );



    // add it to the RequestQueue
    queue.add(getRequest);

希望,它解决了这个问题。

答案 2 :(得分:5)

我注意到volley支持类JsonArrayRequest所以我使用这个类并且问题解决了,我使用的是JsonObjectRequest

https://android.googlesource.com/platform/frameworks/volley/+/43950676303ff68b23a8b469d6a534ccd1e08cfc/src/com/android/volley/toolbox

答案 3 :(得分:0)

以下逻辑可能对您有用:

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
                Request.Method.GET,
                url,
                null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONObject jsonObject1 = new JSONObject(response.toString());
                            JSONArray jsonArray = jsonObject1.getJSONArray("statewise");
                            Log.d("Json response", "onResponse: "+jsonObject1.toString());

                            for (int i = 0; i < jsonArray.length; i++) {
                                JSONObject jsonObject = jsonArray.getJSONObject(i);

                                //Here you will get your result so can use textview 
                               //to populate the result
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d(TAG, "onErrorResponse: "+error);
            }
        });
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(jsonObjectRequest);
    }