[英]Volley library android - getHeaders() is never used & getParams() is never used
在這里,我想學習為什么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);
我必須在代碼中同時傳遞標頭和參數。
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();
}
};
請檢查您的代碼是否使用緩存。
如果使用緩存,則僅當緩存過期時才允許執行getHeaders()
方法,否則將不執行getHeaders()
。
請使用以下代碼進行凌空緩存。
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.