Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 離線緩存的快速實現

Android 離線緩存的快速實現

編輯:關於Android編程

離線緩存是指在有網絡的狀態下將從服務器獲取的網絡數據,如Json 數據緩存到本地,在斷網的狀態下啟動APP時讀取本地緩存數據顯示在界面上,常用的APP(網易新聞、知乎等等)都是支持離線緩存的,這樣帶來了更好的用戶體驗。

如果能夠在調用網絡接口後自動緩存返回的Json數據,下次在斷網狀態下調用這個接口獲取到緩存的Json數據的話,那該多好呢?Volley做到了這一點。

因此,今天這篇文章介紹的就是使用Volley自帶的數據緩存,配合Universal-ImageLoader的圖片緩存,實現斷網狀態下的圖文顯示。

實現效果

這裡寫圖片描述

如何實現?

1.使用Volley訪問網絡接口

 /**
     * 獲取網絡數據
     */
    private void getData() {
        StringRequest stringRequest = new StringRequest(Request.Method.POST, TEST_API, new Response.Listener() {
            @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 getParams() throws AuthFailureError {
                Map map = new HashMap();
                map.put("phone", "15962203803");
                map.put("password", "123456");
                return map;
            }
        };

        queue.add(stringRequest);
    }

當接口訪問成功以後,Volley會自動緩存此次紀錄在/data/data/{package name}/cache/volley文件夾中。
這裡寫圖片描述
打開上面的文件,可以發現接口的路徑和返回值都被保存在該文件裡面了。
這裡寫圖片描述
當在斷網狀態時,如何獲取到該接口的緩存的返回值呢?
使用RequestQueue提供的getCache()方法查詢該接口的緩存數據<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;"> 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.觀察上面的緩存文件可以發現,Volley只緩存了接口路徑,並沒有緩存接口的傳入參數,因此如果做分頁查詢的話,使用此方法是不妥的。
2.在測試過程中,依然發現有的時候獲取不到緩存數據,有的時候卻可以獲取到。對獲取緩存的代碼延遲加載能夠有效解決這個問題。
3.如果考慮到緩存的過期策略,可以使用更好的ASimpleCache框架輔助開發。對緩存有更高要求的APP,依然應該使用文件緩存或數據庫緩存。

源代碼下載

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved