Android离线缓存的实例代码

android做到一定程度,需要考虑缓存的问题,不信可以掏出手机看看淘宝等一些app是否无网的情况下还可以浏览,不过大部分app并没有考虑到这些问题,解决Android的缓存有哪些方法呢

1.IO流读写文件

2.数据库

3.LruCache和DiskLruCache

个人比较喜欢sd卡文件读写的方式,原因自己可以去分析。

(1)权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 往SDCard写入数据权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

(2)判断网络连接的状态,有什么用呢?自己想

if (isNetworkAvailable(MainActivity.this)) { Toast.makeText(getApplicationContext(), "当前有可用网络!", Toast.LENGTH_LONG).show(); } else { Toast.makeText(getApplicationContext(), "当前wu可用网络!", Toast.LENGTH_LONG).show(); } public boolean isNetworkAvailable(Activity activity) { Context context = activity.getApplicationContext(); // 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理) ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivityManager == null) { return false; } else { // 获取NetworkInfo对象 NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo(); if (networkInfo != null && networkInfo.length > 0) { for (int i = 0; i < networkInfo.length; i++) { System.out.println(i + "===状态===" + networkInfo[i].getState()); System.out.println(i + "===类型===" + networkInfo[i].getTypeName()); // 判断当前网络状态是否为连接状态 if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED) { return true; } } } } return false; }

(3)端口写入数据

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录 File saveFile = new File(sdCardDir, "itcast.txt"); FileOutputStream outStream = new FileOutputStream(saveFile); outStream.write(result.getBytes()); outStream.close(); }

(4)读取数据

File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录 File saveFile1 = new File(sdCardDir, "itcast.txt"); BufferedReader br = null; try { br = new BufferedReader(new FileReader(saveFile1)); String readline = ""; StringBuffer sb = new StringBuffer(); while ((readline = br.readLine()) != null) { System.out.println("readline:" + readline); sb.append(readline); } String str = sb.toString();

(5)部分完整demo1

if (isNetworkAvailable(MainActivity.this)) { Toast.makeText(getApplicationContext(), "当前有可用网络!", Toast.LENGTH_LONG).show(); } else { Toast.makeText(getApplicationContext(), "当前wu可用网络!", Toast.LENGTH_LONG).show(); File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录 File saveFile1 = new File(sdCardDir, "itcast.txt"); BufferedReader br = null; try { br = new BufferedReader(new FileReader(saveFile1)); String readline = ""; StringBuffer sb = new StringBuffer(); while ((readline = br.readLine()) != null) { System.out.println("readline:" + readline); sb.append(readline); } String str = sb.toString(); JSONObject jsonObject = new JSONObject(str); JSONArray jsonArray = jsonObject.getJSONArray("data"); for (int i = 0; i < jsonArray.length(); i++) { JSONObject object = jsonArray.getJSONObject(i); String title = object.getString("name"); String content = object.getString("description"); String url = object.getString("picSmall"); domainBean newsInfo = new domainBean(title, content, url); //String path = Environment.getExternalStorageDirectory() + "/" + name; //ObjectOutputStream out =new ObjectOutputStream(new FileOutputStream(path)); //out.writeObject(newsInfo); list.add(newsInfo); //新建适配器 beanAdapter = new BeanAdapter(list, MainActivity.this); //配置适配器 xListView.setAdapter(beanAdapter); br.close(); } } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } }

(6)部分完整demo2

public String logoutPost(String URL){ String result = ""; try { String data = URLEncoder.encode("UTF-8"); // + "&password=" + URLEncoder.encode(password, "UTF-8");//传递的数据 URL url = new URL(URL); //2、url.openConnection()打开网络链接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //3、设置请求的方式 conn.setRequestMethod("POST"); conn.setDoInput(true);//发送POST请求必须设置允许输出 conn.setDoOutput(true);//发送POST请求必须设置允许输入 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Charset", "utf-8"); conn.setRequestProperty("Content-Length", String.valueOf(data.getBytes().length)); //5、获取输出流 OutputStream os = conn.getOutputStream(); os.write(data.getBytes()); os.flush(); BufferedReader in=new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while((line=in.readLine())!=null){result+="\n"+line;} if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录 File saveFile = new File(sdCardDir, "itcast.txt"); FileOutputStream outStream = new FileOutputStream(saveFile); outStream.write(result.getBytes()); outStream.close(); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-09-16 20:57:57

Android离线缓存的实例代码的相关文章

Android获取应用程序大小和缓存的实例代码_Android

info package com.qin.appsize; import android.content.Intent; import android.graphics.drawable.Drawable; //Model类 ,用来存储应用程序信息 public class AppInfo { private String appLabel; //应用程序标签 private Drawable appIcon ; //应用程序图像 private Intent intent ; //启动应用程序

Android获取应用程序大小和缓存的实例代码

info package com.qin.appsize; import android.content.Intent; import android.graphics.drawable.Drawable; //Model类 ,用来存储应用程序信息 public class AppInfo { private String appLabel; //应用程序标签 private Drawable appIcon ; //应用程序图像 private Intent intent ; //启动应用程序

Webview实现android简单的浏览器实例代码_Android

WebView是Android中一个非常实用的组件,它和Safai.Chrome一样都是基于Webkit网页渲染引擎,可以通过加载HTML数据的方式便捷地展现软件的界面,下面通过本文给大家介绍Webview实现android简单的浏览器实例代码. 实现了浏览器的返回 前进 主页 退出 输入网址的功能 注释的很清楚啦 就不多说了 首先是布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu

Android 画一个太极图实例代码_Android

今天练手一下,一起来画个太极图吧~ 最终效果如下: 最终效果 一般都是先讲原理,我就反其道而行,先讲实现吧. 1.继承实现初始化方法 继承View,实现基本的构造函数: public TestView(Context context) { this(context, null); } public TestView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public TestView(Context c

Android字段验证的实例代码_Android

先给大家展示效果图: package com.example.walkerlogin1; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widge

Android字段验证的实例代码

先给大家展示效果图: package com.example.walkerlogin1; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widge

Android 画一个太极图实例代码

今天练手一下,一起来画个太极图吧~ 最终效果如下: 最终效果 一般都是先讲原理,我就反其道而行,先讲实现吧. 1.继承实现初始化方法 继承View,实现基本的构造函数: public TestView(Context context) { this(context, null); } public TestView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public TestView(Context c

Android绘制验证码的实例代码

在前面仿华为加载动画.仿网易音乐听歌识曲-麦克风动画中,我们通过绘图的基础知识完成了简单的绘制.在本例中,我们将绘制常见的验证码. 一.效果图 二.知识点与思路分析 通过上面的效果图观察,我们可以看到里面有绘制的随机线条,随机绘制的验证码. 绘制线条,直线或曲线 绘制文本,生成的验证码文本的绘制 绘制圆点. 三.代码编写 /** * Created by Iflytek_dsw on 2017/7/3. */ public class IdentifyCodeUtil { private sta

android离线缓存技术

离线缓存是指在有网络的状态下将从服务器获取的网络数据,如Json 数据缓存到本地,在断网的状态下启动APP时读取本地缓存数据显示在界面上,常用的APP(网易新闻.知乎等等)都是支持离线缓存的,这样带来了更好的用户体验. 如果能够在调用网络接口后自动缓存返回的Json数据,下次在断网状态下调用这个接口获取到缓存的Json数据的话,那该多好呢?Volley做到了这一点. 因此,今天这篇文章介绍的就是使用Volley自带的数据缓存,配合Universal-ImageLoader的图片缓存,实现断网状态