Volley中POST方式使用聚合数据返回"错误的请求KEY!"

使用Volley框架,聚合数据的邮编查询接口,如果使用JsonObjectRequest的POST方式请求数据,会返回"错误的请求KEY!",但是使用StringRequest就可以正常返回结果。请问这是什么原因?LogCat中没有报其他信息。

聚合数据信息:

public static final String JUHE_APPKEY = "我申请的聚合数据的APPKEY";
public static final String JUHE_API_URL = "http://v.juhe.cn/postcode/query";

有问题的代码:

private void volleyJsonObjectRequestDome_POST() {

    String url = JUHE_API_URL;
    Map<String, String> paramMap = new HashMap<>();
    // TODO: 处理POST参数
    paramMap.put("postcode", postcode);
    paramMap.put("key", JUHE_APPKEY);
    //产生JsonObject类型的参数
    JSONObject jsonParam = new JSONObject(paramMap);

    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    //测试KEY
    Log.i("DEBUG ###", jsonParam.toString());
    //输出:DEBUG ###: {"postcode":"210044","key":"我申请的聚合数据的APPKEY"}
    //Log输出的KEY和我申请的KEY时一样的

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, jsonParam, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            // TODO: 处理返回结果

            //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            //这里不能得到正常的结果                
            Log.i("### onResponse", "POST_JsonObjectRequest:" + response.toString());
            //输出:POST_JsonObjectRequest:{"error_code":10001,"result":null,"reason":"错误的请求KEY!","resultcode":"101"}

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            // TODO: 处理错误
            Log.e("### onErrorResponse", "POST_JsonObjectRequest:" + error.toString());
        }
    });

    jsonObjectRequest.setTag("JsonObjectRequestTest");
    MyApplication.getRequestQueue().add(jsonObjectRequest);
}

正常的代码:

private void volleyStringRequestDome_POST() {

    String url = JUHE_API_URL;

    StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {

            //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            //正常输出返回结果
            Log.i("### onResponse", "POST_StringRequest:" + response);

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("### onErrorResponse", "POST_StringRequest:" + error.toString());
        }
    }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {

            Map<String, String> paramMap = new HashMap<>();
            // TODO: 处理POST参数
            paramMap.put("postcode", postcode);
            paramMap.put("key", JUHE_APPKEY);

            return paramMap;
        }
    };

    stringRequest.setTag("StringRequest_POST");
    MyApplication.getRequestQueue().add(stringRequest);
}

2个回答

建议你抓包看看 两次请求最终发送的数据有什么不同

qq_21397217
Arvin ZHANG 额,,,那我去学一下怎么抓包,谢谢
3 年多之前 回复

楼主解决没,本人遇到同样的问题,求解答

qq_21397217
Arvin ZHANG 回复YKQi_: 不好意思之前没看到你的回复,之前找到出问题的原因了,谢谢你的解决方案
3 年多之前 回复
YKQi_
ykqidev 已经解决,解决方案:http://blog.csdn.net/onlysnail/article/details/47905375
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问