[英]Android Json Response Caching
我使用Volley框架從服務器獲取json響應並更新View元素,我使用Volley來處理緩存。
每當活動加載時,凌空總是從服務器獲取響應,並且它不會從緩存的響應中加載任何數據,因此我無法使用該緩存的響應來離線加載內容。
每次凌空從服務器獲取時,我都會從服務器加載我的所有圖像,這會導致響應延遲並且不會離線加載圖像。
我經歷了一些stackoverflow答案,但仍然不清楚如何找到正確的方法來緩存json響應並使用它使應用程序脫機工作,當設備連接到Internet時,它應該與服務器上的最新內容同步。
RequestQueue queue = MySingleton.getInstance(this.getApplicationContext()).getRequestQueue();
queue.start();
JsonArrayRequest Req = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
// Parsing json
for (int i = 0; i < response.length(); i++) {
try {
JSONObject obj = response.getJSONObject(i);
MainPojo test = new MainPojo();
String name = obj.getString("facility_name");
MainPojo.oName.add(name);
test.setName(name);
String imgUri = obj.getString("easyurl");
System.out.println(imgUri);
Integer in = getDrawable(imgUri);
Integer ap = R.drawable.appointments;
System.out.println(ap);
System.out.println(in);
// adding movie to movies array
testList.add(test);
} catch (JSONException e) {
e.printStackTrace();
}
}
// notifying list adapter about data changes
mAdapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
}
})
{
//**
// Passing some request headers
//*
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Cookie", MainActivity.sharedpreferences.getString(savedCookie, ""));
headers.put("Set-Cookie", MainActivity.sharedpreferences.getString(savedCookie, ""));
return headers;
}
};
// Add the request to the RequestQueue.
MySingleton.getInstance(this).addToRequestQueue(Req);
我在這里缺少什么來緩存json響應?
服務器管理響應中的“緩存”標頭中可以緩存的內容:“過期”或“最大年齡”
我最近開發了一個用於此場景的項目。 http://mbag102.github.io/spice 。
基本上,它利用GSON和Volley來進行服務器請求,並將結果緩存在SQLite DB中(使用Sugar ORM的稍加修改的版本)。 我在各種應用程序中都使用了它,事實證明它相當快速有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.