【发布时间】:2015-02-21 10:20:25
【问题描述】:
我使用 volley 框架从服务器检索 json 响应,但每次它从服务器加载 json。我如何缓存这个 json 响应以便离线使用它并与新响应同步。以下是我从服务器检索 json 响应的代码
// Creating volley request obj
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");
test.setName(name);
//test.setUrl(obj.getString("easyurl"));
testList.add(test);
} catch (JSONException e) {
e.printStackTrace();
}
}
// notifying list adapter about data changes
// so that it renders the list view with updated data
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, ""));
headers.put("Content-Type", "application/x-www-form-urlencoded");
//headers.put("Content-Type","application/json");
headers.put("Accept", "application/x-www-form-urlencoded");
return headers;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(Req);
}
请告诉我应该如何缓存 json 响应
【问题讨论】:
-
我认为我的解决方案不好,因为它可能会阻止 volley 在需要时更新,试试看它是否会自行更新,您可以添加 header 以查看 volley 何时需要更新
-
标头已经添加,唯一的问题是缓存响应并仅在服务器有更新时同步
标签: json caching android-volley