在Android开发中,数据的持久化是肯定会用到,而持久化的方法大致有五种,分别是文件存储、网络存储、SharedPreferences、Sqlit数据库存储和ContentProvider。这五种存储方式各有各的优点,下面我将一一对它们进行介绍。
1.文件存储
在应用开发中有一个场景,就是从网络中加载图片。我们知道,网络请求都需要时间,如果网络速度不够快,或者没有网络将会造成图片加载速度慢、甚至无法加载成功的问题。在Android中的处理方式其实是对已加载的图片进行一个缓存,包括内存缓存和硬盘缓存两种方式。而硬盘缓存就是运用了在本地文件存储的方式。
我们来看一段代码。
public void getImage(String url){
//从url网络路径解析出文件的名字。
filename=url.substring(url.lastIndexOf("/")+1,url.length());
File file_ima=new File(file_url+filename);
//判断文件是不是存在
if(file_ima.exists()){
//存在直接从本地加载
Toast.makeText(getApplication(),"从本地加载",Toast.LENGTH_LONG).show();
iv_ima.setImageBitmap(BitmapFactory.decodeFile(file_url+filename));
return;
}
//不存在的话,使用下载线程,对图片进行下载,进行存储。
DownloadFile thread=new DownloadFile(mHandler,url,file_url+filename);
thread.start();
}
上面代码,是通过对传入图片的网络路径对图片的名字进行解析,判断该图片在本地文件中是否存在,如果存在,则直接从本地加载。而如果不存在则会调用网络线程对图片进行加载。
public class DownloadFile extends Thread
{
Handler mHandler;
String mUrl;
String mPath;
public DownloadFile(Handler handler, String url, String path){
mHandler=handler;
mUrl=url;
mPath=path;
}
@Override
public void run()
{
super.run();
downLoadFromUrl(mUrl,mPath);
}
public void downLoadFromUrl(String urlStr, String path) {
if(urlStr==null){
return;
}
URL url = null;
try {
url = new URL(urlStr);
Log.e("music", urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置超时间为3秒
conn.setConnectTimeout(3 * 1000);
//防止屏蔽程序抓取而返回403错误
//conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");