android 中使用緩存載入數據

来源:http://www.cnblogs.com/wangshuaiandroid/archive/2016/01/08/5113565.html
-Advertisement-
Play Games

用文件的方法添加本地緩存,保存的是json數據


最近app快完工了,但是很多列表載入,新聞咨詢等數據一直從網路請求,速度很慢,影響用戶體驗,所以尋思用緩存來載入一些更新要求不太高的數據

廢話不多說,上代碼

首先做一個保存緩存的工具類

import java.io.File;
import java.io.IOException;

import android.content.Context;
import android.os.Environment;
import android.util.Log;


/**
* 緩存工具類
*/
public class ConfigCacheUtil {

private static final String TAG=ConfigCacheUtil.class.getName();

/** 1秒超時時間 */
public static final int CONFIG_CACHE_SHORT_TIMEOUT=1000 * 60 * 5; // 5 分鐘

/** 5分鐘超時時間 */
public static final int CONFIG_CACHE_MEDIUM_TIMEOUT=1000 * 3600 * 2; // 2小時

/** 中長緩存時間 */
public static final int CONFIG_CACHE_ML_TIMEOUT=1000 * 60 * 60 * 24 * 1; // 1天

/** 最大緩存時間 */
public static final int CONFIG_CACHE_MAX_TIMEOUT=1000 * 60 * 60 * 24 * 7; // 7天

/**
* CONFIG_CACHE_MODEL_LONG : 長時間(7天)緩存模式 <br>
* CONFIG_CACHE_MODEL_ML : 中長時間(12小時)緩存模式<br>
* CONFIG_CACHE_MODEL_MEDIUM: 中等時間(2小時)緩存模式 <br>
* CONFIG_CACHE_MODEL_SHORT : 短時間(5分鐘)緩存模式
*/
public enum ConfigCacheModel {
CONFIG_CACHE_MODEL_SHORT, CONFIG_CACHE_MODEL_MEDIUM, CONFIG_CACHE_MODEL_ML, CONFIG_CACHE_MODEL_LONG;
}

/**
* 獲取緩存
* @param url 訪問網路的URL
* @return 緩存數據
*/
public static String getUrlCache(String url, ConfigCacheModel model,Context context) {
if(url == null) {
return null;
}

String result=null;
String path=Constant.ENVIROMENT_DIR_CACHE + MD5Utils.md5Encrypt(url)+".txt";
File file=new File(path);
if(file.exists() && file.isFile()) {
long expiredTime=System.currentTimeMillis() - file.lastModified();
Log.d(TAG, file.getAbsolutePath() + " expiredTime:" + expiredTime / 60000 + "min");
// 1。如果系統時間是不正確的
// 2。當網路是無效的,你只能讀緩存
if(UIUtils.isNetWorkConnected(context)) {
if(expiredTime < 0) {
return null;
}
if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_SHORT) {
if(expiredTime > CONFIG_CACHE_SHORT_TIMEOUT) {
return null;
}
} else if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_MEDIUM) {
if(expiredTime > CONFIG_CACHE_MEDIUM_TIMEOUT) {
return null;
}
} else if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_ML) {
if(expiredTime > CONFIG_CACHE_ML_TIMEOUT) {
return null;
}
} else if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_LONG) {
if(expiredTime > CONFIG_CACHE_MEDIUM_TIMEOUT) {
return null;
}
} else {
if(expiredTime > CONFIG_CACHE_MAX_TIMEOUT) {
return null;
}
}
}

try {
result=FileUtils.readTextFile(file);
} catch(IOException e) {
e.printStackTrace();
}
}
return result;
}

/**
* 設置緩存
* @param data
* @param url
*/
public static void setUrlCache(String data, String url) {
if(Constant.ENVIROMENT_DIR_CACHE == null) {
return;
}
File dir=new File(Constant.ENVIROMENT_DIR_CACHE);
if(!dir.exists() && Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
dir.mkdirs();
}
File file=new File(Constant.ENVIROMENT_DIR_CACHE + MD5Utils.md5Encrypt(url)+".txt");
try {
// 創建緩存數據到磁碟,就是創建文件
FileUtils.writeTextFile(file, data);
} catch(IOException e) {
Log.d(TAG, "write " + file.getAbsolutePath() + " data failed!");
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}

/**
* 刪除歷史緩存文件
* @param cacheFile
*/
public static void clearCache(File cacheFile) {
if(cacheFile == null) {
if(Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
try {
File cacheDir=new File(Environment.getExternalStorageDirectory().getPath() + "/gdxz/cache/");
if(cacheDir.exists()) {
clearCache(cacheDir);
}
} catch(Exception e) {
e.printStackTrace();
}
}
} else if(cacheFile.isFile()) {
cacheFile.delete();
} else if(cacheFile.isDirectory()) {
File[] childFiles=cacheFile.listFiles();
for(int i=0; i < childFiles.length; i++) {
clearCache(childFiles[i]);
}
}
}
}

已經寫好的一個工具,只需在需要做緩存的地方調用ConfigCacheUtil.getUrlCache方法傳入相應的url,類型和上下文 判斷結果是否為空,如果為空說明不存在緩存請求網路載入數據。如果不為空說明緩存中有數據直接讀緩存,得到result再處理json數據就ok了

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.先來研究下這個軟體-》Appicon and Launchimage Maker首先打開你電腦上的AppStore,然後搜索:AppIcon然後回車:這裡我們先使用免費版的點擊下載。(左上角那個)然後打開軟體,應該是這樣的:軟體好人性化,給我們標註了1,2,3該幹啥。1選圖片唄。2.選是要給什麼...
  • 在平時的工作中,會經常用到adb命令,在這裡稍微整理了一下。一.概要1.什麼是adb?adb全稱為Android Debug Bridge,就是起到調試橋的作用。顧名思義,adb就是一個debug工具。2.adb工作原理不是很理解?那就來看看它的工作原理吧。上圖是一個簡單的adb工作原理圖。adb客...
  • 聲明:本文源碼出自實現雪花飛舞效果(有改動)主要通過這篇文來分析自定義view的實現過程。沒事時,比較喜歡上網看看一些新的東西,泡在網上的日子就是一個很不錯的網站。下麵開始了,哈哈。^_^ 大家都知道,自定義view分成三個類型,1、是完全自定義,自己繪製,例如本文講的例子。2、是Groupvie....
  • 下文中的Linux只表示公司72 CI伺服器配置,基它Linux伺服器和Mac電腦可供參考。
  • 現場保護當一個活動進入到了停止的狀態,是有可能被系統回收的,我們都學過Activity的生命周期當活動處於onPause() ,onStop() ,onDestroy() 三種狀態時程式可能會被Android系統回收掉,這時如果之前未進行保護操作把數據保存的話就會造成用戶在程式當中的數據或者修改丟失...
  • 問題:假設你需要找一個女朋友。你先前的尋找嘗試都以失敗告終,所以你決定找一個相親代理。相親代理每天給你推薦一個女孩紙。你會面談此人,然後決定要不要與她交往。你必須付給相親代理一小筆費用來面談。要真正地找到一個女朋友則要花更多的錢,因為你必須和目前的女朋友分手,還要付一大筆中介費給相親代理。你的諾言是...
  • Android是通過graphics類來顯示2D圖形的。其中graphics中包括了Canvas、Paint、Color、Bitmap等類。graphics具有繪製點、線、顏色、2D幾何圖形、圖像處理等功能。其中Color和Bitmap是很常用的類,我要講的是Canvas和Paint。顧名思義...
  • 電腦或者手機上做圖像處理有很多方式,但是目前為止最高效的方法是有效地使用圖形處理單元,或者叫 GPU。你的手機包含兩個不同的處理單元,CPU 和 GPU。CPU 是個多面手,並且不得不處理所有的事情,而 GPU 則可以集中來處理好一件事情,就是並行地做浮點運算。事實上,圖像處理和渲染就是在將要渲.....
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...