1:activity_main.xml

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent">
  5.  
  6. <Button
  7. android:id="@+id/btn_get_titles"
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. android:text="Get Titles"/>
  11.  
  12. <ListView
  13. android:id="@+id/lv_show"
  14. android:layout_below="@id/btn_get_titles"
  15. android:layout_width="match_parent"
  16. android:layout_height="wrap_content"/>
  17. </RelativeLayout>

2:MainActivity.java

  1. public class MainActivity extends Activity implements OnClickListener {
  2. private Button btnGetTitles=null;
  3. private ListView lvShow=null;
  4. private List<String> titleList=null;
  5.  
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.activity_main);
  10.  
  11. initUI();
  12.  
  13. btnGetTitles.setOnClickListener(this);
  14. }
  15.  
  16. private void initUI(){
  17. btnGetTitles=(Button)findViewById(R.id.btn_get_titles);
  18. lvShow=(ListView)findViewById(R.id.lv_show);
  19. }
  20.  
  21. @Override
  22. public void onClick(View arg0) {
  23. new Thread(new GetTitlesThread()).start();
  24. }
  25.  
  26. Handler getTitlesHandler=new Handler(){
  27. public void handleMessage(Message msg){
  28. if(msg.what==100){
  29. ArrayAdapter<String> adapter=new ArrayAdapter<String>(
  30. MainActivity.this,
  31. android.R.layout.simple_list_item_1,
  32. titleList);
  33. lvShow.setAdapter(adapter);
  34. }
  35. }
  36. };
  37. class GetTitlesThread implements Runnable{
  38. @Override
  39. public void run() {
  40. //1:判断缓存文件是否存在。/data/data/com.yan.example/jsontest/files/titles.txt
  41. String path=getFilesDir().getPath()+"//" ;
  42. File file=new File(path+"titles.txt");
  43. if(file.exists()){
  44. //2:如果缓存文件存在,就从文件取数据。
  45. readFile("titles.txt");
  46. getTitlesHandler.obtainMessage(100).sendToTarget();
  47. }else{
  48. //3:如果缓存文件不存在,就从网络取数据 ,然后将数据保存到缓存文件。
  49. String url="http://www.zhihuiqd.com/wsht/server/selectTitle2json.php";
  50. String res=getStringFromeNet(url);
  51.  
  52. saveFile("titles.txt",res);//////将内容缓存起来
  53.  
  54. try{
  55. JSONArray json=new JSONArray(res);
  56. int len=json.length();
  57. String title="";
  58. titleList=new ArrayList<String>();
  59.  
  60. for(int i=0;i<len;i++){
  61. JSONObject temp=(JSONObject)json.get(i);
  62. title=temp.getString("title");
  63. titleList.add(title);
  64. }
  65. }catch(Exception e){
  66. e.printStackTrace();
  67. }
  68. getTitlesHandler.obtainMessage(100).sendToTarget();
  69. }
  70. }
  71. }
  72.  
  73. //保存文件
  74. private void saveFile(String filename,String str){
  75. try{
  76. FileOutputStream fos=openFileOutput(filename,Activity.MODE_PRIVATE);
  77. byte[]bytes=str.getBytes();
  78. fos.write(bytes);
  79. fos.flush();
  80. fos.close();
  81. }catch(Exception e){
  82. e.printStackTrace();
  83. }
  84. }
  85.  
  86. //读取文件
  87. private void readFile(String filename){
  88. String res="";
  89. try{
  90. FileInputStream fis=openFileInput(filename);
  91. int length=fis.available();
  92. byte[]buffer=new byte[length];
  93. fis.read(buffer);
  94. res=EncodingUtils.getString(buffer, "UTF-8");
  95. fis.close();
  96. JSONArray json=new JSONArray(res);
  97. int len=json.length();
  98. String title="";
  99. titleList=new ArrayList<String>();
  100. for(int i=0;i<len;i++){
  101. JSONObject temp=(JSONObject)json.get(i);
  102. title=temp.getString("title");
  103. titleList.add(title);
  104. }
  105. }catch(Exception e){
  106. e.printStackTrace();
  107. }
  108. }
  109.  
  110. //从网络服务端取数据
  111. private String getStringFromeNet(String url){
  112. StringBuilder builder=new StringBuilder();
  113. HttpClient client=new DefaultHttpClient();
  114. HttpGet get=new HttpGet(url);
  115. try{
  116. HttpResponse response=client.execute(get);
  117. if(response.getStatusLine().getStatusCode()==200){
  118. BufferedReader reader=new BufferedReader(
  119. new InputStreamReader(response.getEntity().getContent()));
  120. for(String s=reader.readLine();s!=null;s=reader.readLine()){
  121. builder.append(s);
  122. }
  123. }
  124. }catch(Exception e){
  125. e.printStackTrace();
  126. }
  127. return builder.toString();
  128. }
  129. }

3:运行结果。

Android 将从网络获取的数据缓存到私有文件的更多相关文章

  1. Android LazyList 从网络获取图片并缓存

    原演示地址 本文内容 环境 演示 LazyList 从网络获取图片并缓存 参考资料 本文是 Github 上的一个演示,通过网络获取歌手专辑的缩略图,并显示在 ListView 控件中.该演示具备将缩 ...

  2. Android 把从网络获取的图片缓存到内存中

    1:activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi ...

  3. Android Volley 库通过网络获取 JSON 数据

    本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpC ...

  4. Android开发——获取应用数据/缓存大小并清理缓存

    1. 获取应用数据/缓存大小 其中pm为实例化的PackageManager,因为需要遍历所有的已安装的应用.因此需要开启子线程进行处理. 还有需要注意的是,在Android4.2之前getPacka ...

  5. (转载)Android之三种网络请求解析数据(最佳案例)

    [置顶] Android之三种网络请求解析数据(最佳案例) 2016-07-25 18:02 4725人阅读 评论(0) 收藏 举报  分类: Gson.Gson解析(1)  版权声明:本文为博主原创 ...

  6. Android热身:通过网络获取资源并更新UI组件

    Android热身:通过网络获取资源并更新UI组件 目标 点击"发送请求"按钮,下载某网页的html源码,并显示在TextView控件上:点击"清空",清除Te ...

  7. android客户端从服务器端获取json数据并解析的实现代码

    今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下   首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的U ...

  8. (转)android客户端从服务器端获取json数据并解析的实现代码

    今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下       首先客户端从服务器端获取json数据 1.利用HttpUrlConnection   复制代码 ...

  9. Android之三种网络请求解析数据(最佳案例)

    AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...

随机推荐

  1. OBJ-C

    1.直接赋值 NSString *name = @"Starain"; 2.用已经存在的字符串进行初始化 NSString *name2 = [NSString stringWit ...

  2. XTU1199:Number Game

    题目描写叙述 给你一个有N个数的集合S和一个数X,推断是否存在S的一个子集,子集里的数的最小公倍数正好是X. 输入 第一行是数据组数T. 接下来有多组数据,每组数据包括两行: 第一行有2个数N和X,1 ...

  3. android ListView和GridView拖拽移位具体实现及拓展

    关于ListView拖拽移动位置,想必大家并不陌生,比较不错的软件都用到如此功能了.如:搜狐,网易,百度等,但是相比来说还是百度的用户体验较好,不偏心了,下面看几个示例:              首 ...

  4. diameter - degree problem

    如今要构建一个网络模型,网络中的每一个节点最多和 d 个节点相连接, 且信息的传播从随意一个节点到另外随意一个节点的"最短路径" (路径依照单位路径算)都不能超过 k,问网络中最多 ...

  5. Qt Style Sheets Reference

    Qt Style Sheets support various properties, pseudo-states, and subcontrols that make it possible to ...

  6. ubuntu下mysql中文乱码问题

    本来就是想弄个网页往数据库里添加数据的,然后就发现了mysql的中文乱码问题,弄了半天解决方法如下: 首先停mysql服务,编辑配置文件my.cnf $ sudo stop mysql $sudo v ...

  7. LVM命令摘要

      命令 描述 物理卷(PV) pvcreate 创建LVM磁盘     #pvcreate /dev/sdb pvdisplay 显示卷组中的物理卷信息 pvchange 设置PV的性能,允许或拒绝 ...

  8. select 响应时间 js

    HTML form select表单标签案例代码如下: 跳转菜单的需要放在head头部标签内的JS脚本代码:<script type="text/javascript"> ...

  9. OD: Vulnerability Detection

    终于看完第二篇漏洞利用原理高级篇,内容虽然看懂了,但深入理解不够,这部分内容以后还要不断强化. 第三篇是漏洞挖掘技术,篇首的话中,提到程序的不可计算性(图灵机的停机问题).希伯尔数学纲领的失败,结尾说 ...

  10. cookie有效期到了后,是由浏览器还是由系统还删除的

    Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie).而还有一些Cookie在用户退出 ...