Android离线缓存的实例代码

所属分类: 软件编程 / Android 阅读数: 42
收藏 0 赞 0 分享

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;
  }

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

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多