对我所有的Volley请求都使用自定义标头的问题

问题描述 投票:0回答:1

我想为我所有的Volley请求制作Auth标头我已经了解了如何创建一个覆盖请求类的getHeaders的标头,但是我不能不时地从每个请求中更改它,而是想使其变为静态或全局类型,可以在其中进行更改,并且它随处更改。这是到目前为止我尝试过的。

主要活动类别

public class MainActivity extends AppCompatActivity {
RequestQueue requestQueue;
JsonObjectRequest jsonreq;
JSONObject object;
  try{

                requestQueue = Volley.newRequestQueue(MainActivity.this);

                object=new JSONObject();
                jsonreq=new JsonObjectRequest(Request.Method.POST, url, object, new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        res=response.toString();
                        Log.d("log1","res : " + res);

                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.d("log1","Error from response : " +error.networkResponse.statusCode);

                    }


                }) {
//want to get rid of this function from here and create in a global scope so I can control its implementation everywhere
                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {
                          Map<String,String> params=new HashMap<String,String>();
    params.put("Authorization","xxxxxxxx");
    return params;

                    }
                };


               requestQueue.add(jsonreq);    

            }
            catch (Exception e){
                Log.d("log1","error from catch " + e);
                return e.toString();
            }
            return res;

我尝试制作一个自定义类来扩展HurlStack并覆盖执行请求。这是自定义HurlStack类的代码,称为GlobalHeaders

public class GlobalHeaders extends HurlStack {
    String testing="xxxxxxxx";

    @Override
    public HttpResponse executeRequest(Request<?> request, Map<String, String> additionalHeaders) throws IOException, AuthFailureError {
        Map<String, String> headers = request.getHeaders();
        headers.put("Content-Type", "application/json; charset=utf-8");
        headers.put("Authorization",testing);
        return super.executeRequest(request, headers);
    }

现在,我不确定如何在添加requestQueue(jsonReq);的主类中使用此方法;我尝试了其他方法,即用我的自定义类覆盖了Volley的Request类,但又失败了。请指出我如何使这项工作或任何其他方法。我是Java和Android的新手。

java android http android-volley
1个回答
0
投票
好吧,我已经尝试过,这种解决方案似乎可以解决。在这里发布,这样将来也可能会对某人有所帮助。

当我使用下面的代码将其实例添加到请求中时,执行请求被调用,从而从Main活动中删除了getHeader方法。

if(stack == null){ stack=new GlobalHeaders(); requestQueue=Volley.newRequestQueue(getApplicationContext(),stack); requestQueue.add(jsonreq); }

还需要更改executeRequest方法中的第一行以适应后面的空异常

Map<String, String> headers = new HashMap<>(additionalHeaders);

并保持return语句不变。
© www.soinside.com 2019 - 2024. All rights reserved.