我想为我所有的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的新手。
当我使用下面的代码将其实例添加到请求中时,执行请求被调用,从而从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语句不变。