Android 오프라인 캐 시 구현 방법

오프라인 캐 시 는 네트워크 가 잘 통 하 는 상황 에서 서버 에서 받 은 데 이 터 를 로 컬 로 저장 하고 네트워크 가 끊 긴 후에 로 컬 파일 의 데 이 터 를 직접 읽 는 것 입 니 다.예 를 들 어 JSon 데이터 캐 시가 로 컬 에 있 고 네트워크 가 끊 긴 상태 에서 앱 을 시작 할 때 로 컬 캐 시 데 이 터 를 읽 어 인터페이스 에 표시 합 니 다.자주 사용 하 는 앱(왕 이 뉴스,알 고 있 는 지 등)은 모두 오프라인 캐 시 를 지원 하기 때문에 더욱 좋 은 사용자 체험 을 가 져 옵 니 다.
네트워크 인 터 페 이 스 를 호출 한 후 자동 으로 캐 시 되 돌아 오 는 JSon 데 이 터 를 사용 할 수 있다 면 다음 에 네트워크 가 끊 긴 상태 에서 이 인 터 페 이 스 를 호출 하여 캐 시 된 JSon 데 이 터 를 가 져 올 수 있다 면 얼마나 좋 을 까?볼 리 가 그 랬 어.
따라서 오늘 이 글 은 Volley 가 자체 적 으로 가지 고 있 는 데이터 캐 시 를 사용 하여 유 니 버 설-ImageLoader 의 이미지 캐 시 와 결합 하여 네트워크 가 끊 긴 상태 에서 그림 과 글 을 표시 하 는 것 을 소개 합 니 다.
실현 효과
这里写图片描述
어떻게 실현 합 니까?
1.Volley 를 사용 하여 네트워크 인터페이스 에 접근

/**
*       
*/
private void getData() {
StringRequest stringRequest = new StringRequest(Request.Method.POST, TEST_API, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
textView.setText("data from Internet: " + s);
try {
JSONObject jsonObject = new JSONObject(s);
JSONArray resultList = jsonObject.getJSONArray("resultList");
JSONObject JSONObject = (org.json.JSONObject) resultList.opt(0);
String head_img = JSONObject.getString("head_img");
ImageLoader.getInstance().displayImage(head_img, imageView);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("phone", "15962203803");
map.put("password", "123456");
return map;
}
};
queue.add(stringRequest);
}
인터페이스 접근 이 성공 하면 Volley 는 이번 기록 을/data/data/{package name}/cache/volley 폴 더 에 자동 으로 캐 시 합 니 다.
这里写图片描述  
위의 파일 을 열 면 인터페이스의 경로 와 반환 값 이 이 파일 에 저 장 된 것 을 발견 할 수 있 습 니 다.
这里写图片描述  
네트워크 가 끊 긴 상태 에서 이 인터페이스의 캐 시 반환 값 을 어떻게 가 져 옵 니까?
RequestQueue 가 제공 하 는 getCache()방법 으로 이 인터페이스의 캐 시 데 이 터 를 조회 합 니 다.

if (queue.getCache().get(TEST_API) != null) {
String cachedResponse = new String(queue.getCache().get(TEST_API).data);
2.Universal-ImageLoader 로 그림 불 러 오기

ImageLoader.getInstance().displayImage(head_img, imageView);
주의 점
1.위의 캐 시 파일 을 살 펴 보면 볼 리 는 인터페이스 경로 만 캐 시 하고 캐 시 인터페이스 에 들 어 오 는 인자 가 없 기 때문에 페이지 를 나 누 어 조회 하면 이 방법 을 사용 하 는 것 이 타당 하지 않다.
2.테스트 과정 에서 캐 시 데 이 터 를 가 져 오지 못 할 때 도 있 고 가 져 올 때 도 있 습 니 다.캐 시 를 가 져 오 는 코드 지연 로드 는 이 문 제 를 효과적으로 해결 할 수 있 습 니 다.
3.캐 시 만 료 정책 을 고려 하면 더 좋 은 ASimple Cache 프레임 워 크 를 사용 하여 개발 을 보조 할 수 있 습 니 다.캐 시 에 대한 요구 가 더 높 은 앱 은 여전히 파일 캐 시 나 데이터베이스 캐 시 를 사용 해 야 한다.
이상 의 내용 은 소 편 이 소개 한 안 드 로 이 드 가 오프라인 캐 시 를 실현 하 는 방법 입 니 다.도움 이 되 셨 으 면 좋 겠 습 니 다!

좋은 웹페이지 즐겨찾기