【问题标题】:Android volley How to send request with both authentification headers and Json object in bodyAndroid volley 如何使用身份验证标头和正文中的 Json 对象发送请求
【发布时间】:2013-11-26 13:46:57
【问题描述】:

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

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

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

知道该怎么做吗?

【问题讨论】:

    标签: android json android-volley


    【解决方案1】:

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

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

    此处描述:

    Asynchronous HTTP Requests in Android Using Volley

    【讨论】:

    • 我试过了,还是不行,因为JsonObjectRequest直接获取body内容。
    【解决方案2】:

    试试这个代码

    @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;
    }
    

    【讨论】:

      【解决方案3】:

      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);
      

      这对我有用!!

      【讨论】:

      • getParams 仅用于 POST 请求。 GET 请求没有正文,因此永远不会调用 getParams。
      猜你喜欢
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 2018-02-16
      相关资源
      最近更新 更多