【问题标题】:How to pass params and add authorization header in GET Request in Volley如何在 Volley 的 GET 请求中传递参数并添加授权标头
【发布时间】:2018-02-23 06:44:35
【问题描述】:

我试图在我的 Android 应用程序中从我的服务器检索响应,但收到“com.android.volley.ServerError” E/Volley:[224669] BasicNetwork.performRequest:http://52.74.115.250:8080/api/products 的意外响应代码 400

当我在 Postman 中尝试时,我确实得到了响应。

这是我的 GET 请求代码:

JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET, Constants.productListUrlStr, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.d("jsonsucces","success");

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("jsonerror",error.toString());
            }
        }) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> headers = new HashMap<>();
                headers.put("Authorization", Constants.getToken(getActivity()));

                //headers=globalProvider.addHeaderToken(getActivity());
                return headers;
            }

            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                if (contract!=null){
                    if(contract._supplier!=null){
                        Log.d("checksupplier",contract._supplier);
                        params.put("_supplier",contract._supplier);
                    }
                }
                if(!globalProvider.ShangpingHeaderLoadCategory .equals("")){
                    params.put("category",globalProvider.ShangpingHeaderLoadCategory);
                    Log.d("checkcategoryhe",globalProvider.ShangpingHeaderLoadCategory);
                }
                return params;
            }
        };
        globalProvider.addRequest(jsonObjectRequest);

我做错了什么?

【问题讨论】:

  • 代码对我来说看起来不错。与服务器团队联系并检查他们的期望。
  • 错误代码 400 表明这是一个错误的请求。在服务器端查看原因。
  • @Kunu 我在邮递员中再次检查,所以当我没有将 _supplier 添加到 GET 请求时,我得到 Unexpected response code 400 ,否则它工作正常。这意味着在我的 GET 请求中“getParams( )" 没有被调用。如何解决这个问题?
  • @SripadRaj 检查上面的评论,谢谢!
  • @user3792429 你试过StringRequest吗?

标签: android get android-volley


【解决方案1】:

很少有关于getParams() 的帖子不再适用于JsonObjectRequest 凌空请求。

或者,您可以使用StringRequest 或对您的请求进行一些调整,如下所示

JSONObject jOb = new JSONObject();
try {
    jOb.put("_supplier", contract._supplier);
    jOb.put("category", globalProvider.ShangpingHeaderLoadCategory);
} catch (JSONException e) {
    e.printStackTrace();
}

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, Constants.productListUrlStr, jOb, new Response.Listener<JSONObject>() {
    @Override
    public void onResponse(JSONObject response) {
        Log.d("jsonsucces","success");

    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.d("jsonerror",error.toString());
    }
}) {
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String, String> headers = new HashMap<>();
        headers.put("Authorization", Constants.getToken(getActivity()));

        //headers=globalProvider.addHeaderToken(getActivity());
        return headers;
    }
};

【讨论】:

  • 没用!都试过了(你的代码和 StringRequest)
  • 嗨!刚刚尝试改造,我得到了回应,想知道为什么它在 volley 中不起作用。只是添加 _supplier 是一个查询参数,所以 url 应该是:52.74.115.250:8080/api/…
【解决方案2】:

我想通了,因为我传递了查询参数,所以我错误地构造了我的 url。 String uri= String.format(Constants.productListUrlStr+"?_supplier=%1$s",contract._supplier);

    StringRequest stringRequest=new StringRequest(Request.Method.GET, uri, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.d("checksuc",response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d("checkstrerr",error.networkResponse.headers.toString());
        }
    })
    {

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> headers = new HashMap<>();
            headers.put("Authorization", Constants.getToken(getActivity()));


            //headers=globalProvider.addHeaderToken(getActivity());
            return headers;
        }




    }
    ;
    globalProvider.addRequest(stringRequest);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2018-12-18
    • 2022-11-09
    • 2012-05-02
    相关资源
    最近更新 更多