[英]Volley library android - getHeaders() is never used & getParams() is never used
Here I want to learn why is getHeaders()
and getParams()
functions are not used and working.? 在这里,我想学习为什么
getHeaders()
和getParams()
函数没有使用并正常工作。
private String tag_json_obj = "jobj_req";
ProgressDialog pDialog = new ProgressDialog(this);
String tag_json_obj = "json_obj_req";
String url = "https://api.abc.xyz.com:3021/login";
pDialog.setMessage("Loading...");
pDialog.show();
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
url, obj,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(AbcLogin.class.getSimpleName(), response.toString());
pDialog.hide();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(AbcLogin.class.getSimpleName(), "Error: " + error.getMessage());
// hide the progress dialog
pDialog.hide();
}
});
/**
* Passing some request headers
* */
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json");
return headers;
}
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("user", "abc12");
params.put("password", "xyzan");
return params;
}
// Adding request to request queue
AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
I have to pass the headers and parameters both in the code. 我必须在代码中同时传递标头和参数。
StringRequest stringObjectRequest = new StringRequest(httpMethod, url, new Listener<String>() {
@Override
public void onResponse(String response) {
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if(error != null && error.getMessage() != null)
{
Log.e("Response error", error.getMessage());
}
}
}
)
{
@Override
protected Map<String, String> getParams() throws AuthFailureError {
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return super.getHeaders();
}
};
Please check in your code whether you using caching. 请检查您的代码是否使用缓存。
If caching is used it will allow getHeaders()
method to be executed only when cache has expired otherwise getHeaders()
will not be executed. 如果使用缓存,则仅当缓存过期时才允许执行
getHeaders()
方法,否则将不执行getHeaders()
。
Please use below code for caching in volley. 请使用以下代码进行凌空缓存。
public static Cache.Entry parseIgnoreCacheHeaders(NetworkResponse response) {
long now = System.currentTimeMillis();
Map<String, String> headers = response.headers;
long serverDate = 0;
String serverEtag = null;
String headerValue;
headerValue = headers.get("Date");
if (headerValue != null) {
serverDate = HttpHeaderParser.parseDateAsEpoch(headerValue);
}
serverEtag = headers.get("ETag");
final long cacheHitButRefreshed = 0; // in 0 millisecond cache will be hit, but also refreshed on background
final long cacheExpired = 0; // in 0 millisecond this cache entry expires completely
final long softExpire = now + cacheHitButRefreshed;
final long ttl = now + cacheExpired;
Cache.Entry entry = new Cache.Entry();
entry.data = response.data;
entry.etag = serverEtag;
entry.softTtl = softExpire;
entry.ttl = ttl;
entry.serverDate = serverDate;
entry.responseHeaders = headers;
return entry;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.