4

我需要通过 volley 发送一个带有身份验证标头和正文中的 Json 对象的 http 请求。但是我在凌空中没有找到这个请求。

我找到了 GsonRequest 和 JsonObjectRequest。 GsonRequest int method, String url, Class clazz, Map headers , Listener listener, ErrorListener errorListener, Gson useGson)

JsonObjectRequest (int 方法, java.lang.String url, JSONObject jsonRequest , Response.Listener listener, Response.ErrorListener errorListener)

知道该怎么做吗?

4

3 回答 3

8

在您的请求类中,覆盖getHeaders()以发送自定义标头

要在请求正文中发送参数,您需要覆盖请求类的 getParams() 或 getBody() 方法

这里描述:

Android 中使用 Volley 的异步 HTTP 请求

于 2013-11-13T20:33:37.130 回答
1

试试这个代码

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
    HashMap<String, String> params = new HashMap<String, String>();
    String creds = String.format("%s:%s","USERNAME","PASSWORD");
    String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.DEFAULT);
    params.put("Authorization", auth);
    return params;
}
于 2015-12-01T13:16:42.837 回答
1

getHeaders() 和 getParams() 方法可以同时用于分别发送数据作为 header 和 body。

JsonObjectRequest jsonObjectRequest = new 
                    JsonObjectRequest(Request.Method.GET,
                    url,
                    null,
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {
                            Log.d(TAG, response.toString());
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.d(TAG, error.toString());
                        }
                    }) {
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    HashMap<String, String> headers = new HashMap<>();

                    headers.put(headerKey, headerValue);
                    return headers;
                }

                @Override
                protected Map<String, String> getParams() throws AuthFailureError {
                    Map<String, String> params = new HashMap<>();
                    params.put(bodyKey, bodyValue);
                    return params;
                }
            };
            VolleySingleton.getInstance(getActivity()).addToRequestQueue(jsonObjectRequest);

这对我有用!

于 2017-02-02T12:19:20.870 回答