Android 将从网络获取的数据缓存到私有文件
1:activity_main.xml
- <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:运行结果。
Android 将从网络获取的数据缓存到私有文件的更多相关文章
- Android LazyList 从网络获取图片并缓存
原演示地址 本文内容 环境 演示 LazyList 从网络获取图片并缓存 参考资料 本文是 Github 上的一个演示,通过网络获取歌手专辑的缩略图,并显示在 ListView 控件中.该演示具备将缩 ...
- Android 把从网络获取的图片缓存到内存中
1:activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi ...
- Android Volley 库通过网络获取 JSON 数据
本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpC ...
- Android开发——获取应用数据/缓存大小并清理缓存
1. 获取应用数据/缓存大小 其中pm为实例化的PackageManager,因为需要遍历所有的已安装的应用.因此需要开启子线程进行处理. 还有需要注意的是,在Android4.2之前getPacka ...
- (转载)Android之三种网络请求解析数据(最佳案例)
[置顶] Android之三种网络请求解析数据(最佳案例) 2016-07-25 18:02 4725人阅读 评论(0) 收藏 举报 分类: Gson.Gson解析(1) 版权声明:本文为博主原创 ...
- Android热身:通过网络获取资源并更新UI组件
Android热身:通过网络获取资源并更新UI组件 目标 点击"发送请求"按钮,下载某网页的html源码,并显示在TextView控件上:点击"清空",清除Te ...
- android客户端从服务器端获取json数据并解析的实现代码
今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下 首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的U ...
- (转)android客户端从服务器端获取json数据并解析的实现代码
今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下 首先客户端从服务器端获取json数据 1.利用HttpUrlConnection 复制代码 ...
- Android之三种网络请求解析数据(最佳案例)
AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...
随机推荐
- OBJ-C
1.直接赋值 NSString *name = @"Starain"; 2.用已经存在的字符串进行初始化 NSString *name2 = [NSString stringWit ...
- XTU1199:Number Game
题目描写叙述 给你一个有N个数的集合S和一个数X,推断是否存在S的一个子集,子集里的数的最小公倍数正好是X. 输入 第一行是数据组数T. 接下来有多组数据,每组数据包括两行: 第一行有2个数N和X,1 ...
- android ListView和GridView拖拽移位具体实现及拓展
关于ListView拖拽移动位置,想必大家并不陌生,比较不错的软件都用到如此功能了.如:搜狐,网易,百度等,但是相比来说还是百度的用户体验较好,不偏心了,下面看几个示例: 首 ...
- diameter - degree problem
如今要构建一个网络模型,网络中的每一个节点最多和 d 个节点相连接, 且信息的传播从随意一个节点到另外随意一个节点的"最短路径" (路径依照单位路径算)都不能超过 k,问网络中最多 ...
- Qt Style Sheets Reference
Qt Style Sheets support various properties, pseudo-states, and subcontrols that make it possible to ...
- ubuntu下mysql中文乱码问题
本来就是想弄个网页往数据库里添加数据的,然后就发现了mysql的中文乱码问题,弄了半天解决方法如下: 首先停mysql服务,编辑配置文件my.cnf $ sudo stop mysql $sudo v ...
- LVM命令摘要
命令 描述 物理卷(PV) pvcreate 创建LVM磁盘 #pvcreate /dev/sdb pvdisplay 显示卷组中的物理卷信息 pvchange 设置PV的性能,允许或拒绝 ...
- select 响应时间 js
HTML form select表单标签案例代码如下: 跳转菜单的需要放在head头部标签内的JS脚本代码:<script type="text/javascript"> ...
- OD: Vulnerability Detection
终于看完第二篇漏洞利用原理高级篇,内容虽然看懂了,但深入理解不够,这部分内容以后还要不断强化. 第三篇是漏洞挖掘技术,篇首的话中,提到程序的不可计算性(图灵机的停机问题).希伯尔数学纲领的失败,结尾说 ...
- cookie有效期到了后,是由浏览器还是由系统还删除的
Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie).而还有一些Cookie在用户退出 ...