Android Json Кэширование ответов
Я использую volley framework для получения ответов json с сервера и обновления элементов View, я использую Volley, поскольку он обрабатывает кэширование.
Всякий раз, когда загружается действие, volley всегда получает ответ от сервера и не загружает никаких данных из кэшированного ответа, поэтому я не могу использовать этот кэшированный ответ для загрузки контента в автономном режиме.
Я загружаю все свои изображения с сервера, каждый раз, когда залп выбирается с сервера, вызывает задержку ответа и не загружает изображения в автономном режиме.
Я просмотрел несколько ответов от stackru, но до сих пор не ясно, как найти правильный способ кеширования ответа json и использовать его, чтобы приложение работало в автономном режиме. Когда устройство подключено к Интернету, оно должно синхронизироваться с последним контентом с сервера.
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?
2 ответа
Недавно я разработал проект, который используется для этого сценария. http://mbag102.github.io/spice.
По сути, он использует GSON и Volley для выполнения запросов к серверу и кэширует результаты в БД SQLite (используя слегка модифицированную версию Sugar ORM). Я использую его в различных своих приложениях, и он оказался достаточно быстрым и эффективным.
Сервер управляет тем, что может быть кэшировано в заголовках "Cache" в ответе: "Expires" или "max-age"