qq_21397217
Arvin ZHANG
2016-09-28 15:18
采纳率: 66.7%
浏览 3.2k
已采纳

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条回答 默认 最新

  • w815878564
    余烬岛游戏 2016-09-28 15:47
    已采纳

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

    点赞 评论
  • YKQi_
    ykqidev 2016-11-05 10:35

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

    点赞 评论

相关推荐