黑马程序----关于异步与读取本地文件

来源:互联网 发布:php开发工具中文版 编辑:程序博客网 时间:2024/05/18 00:16

今天在做一个app的时候出现了一个问题,数据是从网络服务端读取的,可是app每次

启动的时候都从网络获取资源的话会消耗大量的资源,也显得程序不是那么的和谐。上网查了查这方面的

资料,能想对应的东西不是很多,于是自己就写了个简单的程序,也没进行优化什么的。

 

1第一次进入程序的时候读取网络,把资源json写成txt文件保存在sd卡里面。【也有写成xml或者保存在sqlite数据库的】

 

2再次读取的时候先判断本地的 txt文件是否存在,

 

3要是本地的txt文件存在,判断文件时候   “过期”  然后读取本地的txt文件然后 解析json展示数据

 

4.要是文件不存在或者文件过期的话,则读取网路数据,然后保存txt文件。

// 读取txt文件的函数private String loadTextFile(InputStream inputStream) throws IOException {ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();byte[] bytes = new byte[4096];int len = 0;while ((len = inputStream.read(bytes)) > 0) {byteArrayOutputStream.write(bytes, 0, len);}return new String(byteArrayOutputStream.toByteArray(), "UTF8");}//public String readFileSdcard(String fileName) {String res = "";try {FileInputStream fin = new FileInputStream(fileName);int length = fin.available();byte[] buffer = new byte[length];fin.read(buffer);res = EncodingUtils.getString(buffer, "UTF-8");fin.close();} catch (Exception e) {e.printStackTrace();}return res;}//public static String readFile(String fileName) throws IOException {File file = new File(fileName);ByteArrayOutputStream outputStream = new ByteArrayOutputStream(1024);FileInputStream inputStream = new FileInputStream(file);int len = 0;byte[] buffer = new byte[1024];while ((len = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, len);}outputStream.close();inputStream.close();byte[] data = outputStream.toByteArray();return new String(data);}
public static final int CONFIG_CACHE_SHORT_TIMEOUT = 1000 * 60 * 30; // 30// 分钟// 验证缓存是否过期的函数public boolean IsoutTime(String filename) {File files = new File("mnt/sdcard/" + filename);// if (files.exists() && files.isFile()) {long expiredTime = System.currentTimeMillis() - files.lastModified();if (expiredTime > CONFIG_CACHE_SHORT_TIMEOUT) {return true; // 过期了。} else {return false;// 没过期。}}



下面是异步。

private class TextAsyncTask extends AsyncTask<String, Integer, Void> {/* * TextAsyncTask(String params) { *  * } */@Overrideprotected void onPreExecute() {}@Overrideprotected Void doInBackground(String... params) {newslist1 = new ArrayList<NewsEntity>();newslist1 = getText(params[0], newslist1);newsList = newslist1;return null;}@Overrideprotected void onPostExecute(Void result) {switch (getNewsReturnValue) {case 1:Toast.makeText(MainTow.this, "1", Toast.LENGTH_LONG).show();getNewsReturnValue = 0;break;case 2:Toast.makeText(MainTow.this, "2", Toast.LENGTH_LONG).show();getNewsReturnValue = 0;break;case 3:Toast.makeText(MainTow.this, "3", Toast.LENGTH_LONG).show();getNewsReturnValue = 0;break;case 4:Toast.makeText(MainTow.this, "4", Toast.LENGTH_LONG).show();getNewsReturnValue = 0;break;default:getNewsReturnValue = 0;break;}bb.notifyDataSetChanged();}}
//读取json数据解析成模具类
 
private ArrayList<NewsEntity> getText(String filename,ArrayList<NewsEntity> newslist1) {String requestResult = " ";requestResult = readFileSdcard("mnt/sdcard/" + filename + ".txt");if (requestResult == null) {Toast.makeText(getApplicationContext(), "读取失败", 1).show();}if (requestResult.equals("RESPONSEERROR")) {getNewsReturnValue = 3;} else if (!requestResult.equals("RESPONSENULL")) {newslist1 = HttpOperation.getObjectFromWebService(requestResult,newslist1);int newNum = newslist1.size();if (newslist1.isEmpty()) {getNewsReturnValue = 1;}} else {getNewsReturnValue = 4;}return newslist1;}


------- android培训java培训IOS培训.Net培训期待与您交流! ----------
 

0 0
原创粉丝点击