Android 将从网络获取的数据缓存到私有文件
2013-10-14 15:52
375 查看
1:activity_main.xml
2:MainActivity.java
3:运行结果。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/btn_get_titles" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Get Titles"/> <ListView android:id="@+id/lv_show" android:layout_below="@id/btn_get_titles" android:layout_width="match_parent" android:layout_height="wrap_content"/> </RelativeLayout>
2:MainActivity.java
public class MainActivity extends Activity implements OnClickListener { private Button btnGetTitles=null; private ListView lvShow=null; private List<String> titleList=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initUI(); btnGetTitles.setOnClickListener(this); } private void initUI(){ btnGetTitles=(Button)findViewById(R.id.btn_get_titles); lvShow=(ListView)findViewById(R.id.lv_show); } @Override public void onClick(View arg0) { new Thread(new GetTitlesThread()).start(); } Handler getTitlesHandler=new Handler(){ public void handleMessage(Message msg){ if(msg.what==100){ ArrayAdapter<String> adapter=new ArrayAdapter<String>( MainActivity.this, android.R.layout.simple_list_item_1, titleList); lvShow.setAdapter(adapter); } } }; class GetTitlesThread implements Runnable{ @Override public void run() { //1:判断缓存文件是否存在。/data/data/com.yan.example/jsontest/files/titles.txt String path=getFilesDir().getPath()+"//" ; File file=new File(path+"titles.txt"); if(file.exists()){ //2:如果缓存文件存在,就从文件取数据。 readFile("titles.txt"); getTitlesHandler.obtainMessage(100).sendToTarget(); }else{ //3:如果缓存文件不存在,就从网络取数据 ,然后将数据保存到缓存文件。 String url="http://www.zhihuiqd.com/wsht/server/selectTitle2json.php"; String res=getStringFromeNet(url); saveFile("titles.txt",res);//////将内容缓存起来 try{ JSONArray json=new JSONArray(res); int len=json.length(); String title=""; titleList=new ArrayList<String>(); for(int i=0;i<len;i++){ JSONObject temp=(JSONObject)json.get(i); title=temp.getString("title"); titleList.add(title); } }catch(Exception e){ e.printStackTrace(); } getTitlesHandler.obtainMessage(100).sendToTarget(); } } } //保存文件 private void saveFile(String filename,String str){ try{ FileOutputStream fos=openFileOutput(filename,Activity.MODE_PRIVATE); byte[]bytes=str.getBytes(); fos.write(bytes); fos.flush(); fos.close(); }catch(Exception e){ e.printStackTrace(); } } //读取文件 private void readFile(String filename){ String res=""; try{ FileInputStream fis=openFileInput(filename); int length=fis.available(); byte[]buffer=new byte[length]; fis.read(buffer); res=EncodingUtils.getString(buffer, "UTF-8"); fis.close(); JSONArray json=new JSONArray(res); int len=json.length(); String title=""; titleList=new ArrayList<String>(); for(int i=0;i<len;i++){ JSONObject temp=(JSONObject)json.get(i); title=temp.getString("title"); titleList.add(title); } }catch(Exception e){ e.printStackTrace(); } } //从网络服务端取数据 private String getStringFromeNet(String url){ StringBuilder builder=new StringBuilder(); HttpClient client=new DefaultHttpClient(); HttpGet get=new HttpGet(url); try{ HttpResponse response=client.execute(get); if(response.getStatusLine().getStatusCode()==200){ BufferedReader reader=new BufferedReader( new InputStreamReader(response.getEntity().getContent())); for(String s=reader.readLine();s!=null;s=reader.readLine()){ builder.append(s); } } }catch(Exception e){ e.printStackTrace(); } return builder.toString(); } }
3:运行结果。
![](http://images.cnitblog.com/blog/571758/201310/14154956-9a62ea5240dd4fdab4bd4c63109b985b.png)
相关文章推荐
- android 获取网络图片缓存(内存—>文件—>网络)
- android中图片的三级cache策略(内存、文件、网络)之三:文件缓存策略
- android—获取网络数据
- 简单的网络数据用文件来缓存
- 调试代码的方法--将网络获取到的数据存储到文件中,然后打开文件看结果。
- [Android] - Jsoup实现网络爬虫,获取糗事百科数据
- 第十二篇:Android GET请求获取网络数据以及POST数据(使用HttpURLConnection)
- Android之网络----使用HttpClient发送HTTP请求(通过get方法获取数据)
- Android中网络获取数据进行Gson解析
- Android应用开发之获取网络数据
- Android中获取网络图片的方法(如果手机缓存里面有就从缓存获取)
- Android开发17——获取网络资源之XML数据
- Android中通过代码获取arrays.xml文件中的数据
- Android异步加载获取网络数据(图片)
- Android 从网络中获取数据时 产生部分数据乱码的解决
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Android之从网络中获取数据并返回客户端的两种方式:XML格式返回与Json格式返回
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
- 工具类:HttpURLConnHelper(实现网络访问文件,将获取到数据储存在文件流中)