【问题标题】:Volley-Lib -> String cannot be converted to JSONObject with a real JSONObjectVolley-Lib -> 字符串不能用真正的 JSONObject 转换为 JSONObject
【发布时间】:2015-05-03 08:29:30
【问题描述】:

JSONObject 是这样的:

{"tag":"login","success":1,"error":0,"name":"pb","dir":"DH","br":"LL","gr":"IW","email":"empty"}

logcat 说:

 Value Access of type java.lang.String cannot be converted to JSONObject

在旁边运行一个 AsyncTask,它可以工作。为什么 volley-code 说它是一个字符串?来自服务器的答案肯定是 JSONObject.... 为什么说它是 String?

private void makeJsonObjectRequest() {


        JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
                url, null, new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d(TAG, response.toString());

                        try {
                            String dir = response.getString("dir");
                            Log.d("dir", dir);

                        } catch (JSONException e) {
                            e.printStackTrace();
                            Log.d("JSONException", e.getMessage().toString());
                        }
                    }
                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.d("onErrorResponse", error.getMessage().toString());
                    }
                })
        {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();
                params.put("tag", "login");
                params.put("name", name);
                params.put("password", password);
                return params;

            }
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String,String> params = new HashMap<String, String>();
                params.put("Content-Type","application/x-www-form-urlencoded");
                return params;
            }
            };
        AppController.getInstance().addToRequestQueue(jsonObjReq);
    }

【问题讨论】:

    标签: android android-volley


    【解决方案1】:

    我不知道为什么它是附加的,但我遇到了相同类型的请求(HTTP POST + HEADER + PARAMS)的 volley 相同的问题

    我使用 StringRequest 修复它并手动解析它。试试这个方法

        StringRequest postRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
    
                Log.d(TAG, "Success "+ s.toString());
    
                try {
                    JSONObject data = new JSONObject(s);
                    String dir = data.getString("dir");
                    Log.d("dir", dir);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        },
                new Response.ErrorListener() {
    
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d(TAG, "Error response " + error.getMessage());
            }
        }){
            @Override
            protected Map<String,String> getParams(){
                Map<String,String> params = new HashMap<String, String>(); 
                params.put("tag", "login");
                params.put("name", name);
                params.put("password", password);
                return params;
            }
    
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String,String> params = new HashMap<String, String>();
                params.put("Content-Type","application/x-www-form-urlencoded");
                return params;
            }
        };
    

    【讨论】:

      【解决方案2】:

      虽然StringRequest 的解决方法可以正常工作,但我发现了“真正的”问题,这是 Volley 中一个非常不直观的默认实现,导致POST 请求变成GET。看看我的回答here 寻求解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-27
        • 2018-05-07
        • 2017-04-14
        • 1970-01-01
        • 2017-08-11
        • 1970-01-01
        • 2015-07-23
        • 2021-11-15
        相关资源
        最近更新 更多