Volley String cannot be converted to JSONObject

安稳与你 提交于 2020-01-07 00:05:47

问题


I'm always getting the following error as long as i put a array into Params. Even after converting to String it still gives that error. The code works fine without the contactlist array inside it. Any idea?

Error

com.android.volley.ParseError: org.json.JSONException: Value Created of type java.lang.String cannot be converted to JSONObject

Sample response:

{
"username": "test2",
"lists": [
    "contact_0",
    "contact_1",
    "contact_2",
    "contact_3",
    "contact_4",
    "contact_5",
    "contact_6",
    "contact_7",
    "contact_8",
    "contact_9"
]
}

ArrayList<String> contactList = new ArrayList<String>();
public String joinInfo;


Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
        while (phones.moveToNext())
        {
            String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            System.out.println("name : " + name + ", ID : " + phoneNumber);
            joinInfo = name;
            contactList.add(joinInfo);
        }
        phones.close();

 RequestQueue rq = Volley.newRequestQueue(this);

        JSONObject params = new JSONObject();
        try {
            params.put("username", "test2");
            params.put("lists", contactList.toString()); // When i change this to simply "test" a string, it works fine.
            Log.d("PANDA", contactList.toString());
        } catch (JSONException e) {
            e.printStackTrace();
        }

        JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
                "http://postcatcher.in/catchers/55521f03f708be0300001d28", params, //Not null.
                new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d("PANDA", response.toString());
                    }
                }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d("PANDA", "Error: " + error.getMessage());
                Log.d("PANDA", error.toString());
            }
        });

        // Adding request to request queue
        rq.add(jsonObjReq);

回答1:


PostCatcher although allowing us to post requests, its response is basically a plain string "Created" and not in Json format. As such our client code is not able to ascertain it and throws error. One thing is even without ArrayList object that is with plain (String, String) K,V pair also it would fail.

You can verify it if you try sending request through Advanced Rest Client (see attached)



来源:https://stackoverflow.com/questions/30196601/volley-string-cannot-be-converted-to-jsonobject

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!