广州网站建设丿新科送推广,cf租号网站怎么做的,关键词的选取原则有,装潢设计专业学校前言1、每一种要缓存的数据都是有对应的versionCode#xff0c;通过versionCode请求网络获取是否需要更新2、提前将要缓存的数据放入assets文件夹中#xff0c;打包上线。缓存设计代码实现/*** Created by huangbo on 2017/6/19.** 主要是缓存的工具类** 缓存设计#xff1a…前言1、每一种要缓存的数据都是有对应的versionCode通过versionCode请求网络获取是否需要更新2、提前将要缓存的数据放入assets文件夹中打包上线。缓存设计代码实现/*** Created by huangbo on 2017/6/19.** 主要是缓存的工具类** 缓存设计* 0.从内存中读取数据 0.1 读取成功- 取出versionCode -3* 0.2 读取失败- 1** 1.从文件中读取数据1.1读取成成功- 取出versionCode -3* 1.2读取失败- 2* 2.从Assets中读取数据2.1读取成功- 取出versionCode -3* 2.2读取失败- versionCode0 -3** 3.用versionCode请求网络 3.1请求成功(有版本更新)将文件写入内存写入文件* 3.1 请求失败(没有版本更新)**/public class CacheData {public static CacheData cacheData;public static CacheData getInstance() {if (cacheData null) {cacheData new CacheData();}return cacheData;}String mFileName;public CacheData cacheName(String mFileName) {this.mFileName mFileName;return this;}ExecutorService cachedThreadPool;private CacheData() {cachedThreadPool Executors.newCachedThreadPool();}/*** 从assets 中读取文件** return cacheData 的Json串*/private String readDataFromAssets() {try {InputStream ips AppUtils.ApplicationContext.getAssets().open(mFileName);byte[] bytes new byte[ips.available()];ips.read(bytes);ips.close();return new String(bytes);} catch (IOException e) {e.printStackTrace();}return ;}public void readDataFromAssets(final Handler handler) {cachedThreadPool.execute(new Runnable() {Overridepublic void run() {String json readDataFromAssets();Message message handler.obtainMessage(1, json);handler.sendMessage(message);}});}public void readDataFromFile(final Handler handler) {cachedThreadPool.execute(new Runnable() {Overridepublic void run() {Message message handler.obtainMessage(1, readDataFromFile());handler.sendMessage(message);}});}/*** 将region 更新到指定文件里* param*/public void writeData2FileWithThread(final String Data) {cachedThreadPool.execute(new Runnable() {Overridepublic void run() {writeRegion2File(Data);}});}/*** return cacheData 的Json串*/private String readDataFromFile() {try {File file new File(AppUtils.getCacheDirectory(), mFileName);if (!file.exists()) {return null;}FileInputStream fis new FileInputStream(file);byte[] bytes new byte[fis.available()];fis.read(bytes);fis.close();return new String(bytes);} catch (IOException e) {e.printStackTrace();}return ;}private void writeData2File(String jsonData) {try {File cityFile new File(AppUtils.getCacheDirectory(), mFileName);if (!cityFile.exists()) {cityFile.createNewFile();}FileOutputStream fos new FileOutputStream(cityFile);fos.write(regionJsonData.getBytes(UTF-8));fos.close();} catch (IOException e) {e.printStackTrace();}}}使用方法/*** Created by huangbo on 2017/6/8.*/public class Region {public static Region region;public static Region getInstance() {if (region null) {region new Region();}return region;}ProvinceCityBean provinceCityBean;public int getVersion() {return provinceCityBean null ? 0 : provinceCityBean.getVersion();}public ProvinceCityBean getProvinceCityBean() {return provinceCityBean;}public void setProvinceCityBean(final String mRegionJson, final Handler handler) {if (TextUtils.isEmpty(mRegionJson)) {return;}cachedThreadPool.execute(new Runnable() {Overridepublic void run() {provinceCityBean GsonUtils.GsonToBean(mRegionJson, ProvinceCityBean.class);if (handler ! null) {handler.sendEmptyMessage(1);}}});}ExecutorService cachedThreadPool;CacheData cacheData;private Region() {cachedThreadPool Executors.newCachedThreadPool();cacheData CacheData.getInstance().cacheName(Const.REGION_JSON);}/*** 具体调用方法*/public void cacheRegion() {if (provinceCityBean null) {readRegionFromFile();} else {readRegionFromHttp();}}private void readRegionFromFile() {cacheData.readDataFromFile(new Handler() {Overridepublic void handleMessage(Message msg) {String jsonRegion (String) msg.obj;onReadRegionFromFileBack(jsonRegion);}});}/*** 从文件中读取数据若为null 继续从Asset中获取** param jsonRegion*/private void onReadRegionFromFileBack(String jsonRegion) {if (!TextUtils.isEmpty(jsonRegion)) {/*文件中读取成功 设置到Region中更新json 取出version请求网络判断是否为最新的版本 */setProvinceCityBean(jsonRegion, httpHandler);} else {/*文件中读取失败 从assets 中继续读取*/cacheData.readDataFromAssets(new Handler() {Overridepublic void handleMessage(Message msg) {String jsonRegion (String) msg.obj;onReadRegionFromAssetsBack(jsonRegion);}});}}private void onReadRegionFromAssetsBack(String jsonRegion) {if (!TextUtils.isEmpty(jsonRegion)) {/*从assets中读取成功 设置到Region中更新json*/setProvinceCityBean(jsonRegion, httpHandler);} else {readRegionFromHttp();}}private void readRegionFromHttp() {ReqRegion reqRegion new ReqRegion();reqRegion.sendRequest(false, new OnHttpResult() {Overridepublic void onHttpSuccess(String data) {setProvinceCityBean(data, null);cacheData.writeData2FileWithThread(data);}Overridepublic void onHttpFailure(String message) {}});}Handler httpHandler new Handler() {Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);readRegionFromHttp();}};}Region.getInstance().cacheRegion();//实现缓存以上为个人经验希望能给大家一个参考也希望大家多多支持脚本之家。如有错误或未考虑完全的地方望不吝赐教。