Android数据持久化(二)

参考1;http://blog.csdn.net/sylcc_/article/details/7453829

Android中,实现数据持久化主要有四种方式:Preferences,文件I/O,SQLite数据库,ContentProvider组件。

在我们RUI中上述的几种方法都要涉及,其中LauncherProvider.Java文件属于第四种,提供对数据库的一些操作,下面将重点介绍使用ContentProvider来实现数据持久化,其它方法将做简要介绍。

1) 使用Preferences存储应用程序数据

Preferences是一种轻量级的数据存储机制,他将一些简单的数据类型的数据,包括boolean类型,int类型,float类型,long类型以及String类型的数据,以键值对的形式存储在应用程序的私有Preferences目录(/data/data/<包名>/shared_prefs/)中,这种Preferences机制广泛应用于存储应用程序中的配置信息。

写入数据:

sPrefs = PreferenceManager.getDefaultSharedPreferences(context);

sPrefs.edit().putInt(SCREEN_COUNT, count).commit();

查看Preferences中的数据的方法有两种,第一种是使用adb命令查看,第二是使用DDMS——>FileExplorer在目录/data/data/<包名>/shared_prefs/中Preferences导出来查看。


可以看到,Preferences中使用键值对存储信息的,里面存储long,int,boolean等信息。

2)文件I/O

Android平台主要通过java.io.FileInputStream和java.io.FileOutputStream这两个类来实现对文件的读写,java.io.File类则用来构造一个具体指向某个文件或者文件夹的对象。

需要注意的是:每个应用程序所在的包都会有一个私有的存储数据的目录,只有属于这个包中的应用程序才有写入的权限,每个包中应用程序的私有数据目录位于 Android系统中的绝对路径/data/data/<package>/目录中,除了私有目录,应用程序还拥有/sdcard目录即 Android设备上的SD卡的写入权限。文件系统中其他的系统目录,第三方应用程序都是不可写的。

在我们RUI中,下载推荐应用时,就是在SD卡中建立一个目录,将下载的apk放入该目录中,具体的实现可以查看com.rui.mid.launcher.service.download中的FileUtil.java文件。在该文件中有一个changeMode方法改变文件的权限(可读,可写,可执行),就是为了能让系统调用该apk,实现应用的安装。

3)SQLite数据库

当应用程序需要处理的数据量比较大时,为了更加合理地存储、管理、查询数据,我们往往使用关系数据库来存储数据。Android平台为开发者提供了SQLite数据库相关的API来实现对数据库操作的支持,开发人员可以很方便的使用这些API来对SQLite数据库进行创建、修改及查询等操作。Android系统的很多用户数据,如联系人信息,通话记录,短信息等,都是存储在SQLite数据库当中的,所以利用操作SQLite数据库的API可以同样方便的访问和修改这些数据。

在实际的应用程序编写中,为了更好的对SQlite数据的创建,打开,更改进行管理,往往会编写一个SQLiteOpenHelper的数据库辅助类来帮助我们创建和打开数据库。可以查考博客http://blog.csdn.net/rhljiayou/article/details/7085347

利用SQLiteDatabase对象操作数据库,他除了提供execSQL()和rawQuery()这种直接对SQL语句解析的方法外,还针对insert,upate,delete,select等操作专门定义了相关的方法。

SQLite数据库的查看方法也有两种:第一使用SQLite常用命令;第二导出数据库,使用SQLiteManager来查看。如下图所示,在SQLiteManager中使用SQL语句查看数据库中内容。


4)ContentProvider

ContentProvider概念

1 ContentProvider提供为存储和获取数据提供了统一的接口;

2 使用ContentProvider可以在不同的应用程序之间共享数据

3 Android为常见的一些数据提供了ContentPrivider(包括音频,视频,图片和通讯录等等)

ContentProvider使用表的形式来组织数据

Uri

1 每一个ContentProvider都拥有一个公共的uri,这个uri用于表示这个ContentProvider所提供的数据

2 Android所提供的ContentProvider都存放在android.provider包当中

Uri代表了要操作的数据,Uri主要包含了两部分信息:1.需要操作的ContentProvider,对ContentProvider中的什么数据进行操作,一个Uri由以下几部分组成:

1.schemeContentProvider(内容提供者)的scheme已经由Android所规定为:content://

2.主机名(或Authority):用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。

3.路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:

要操作contact表中id10的记录,可以构建这样的路径:/contact/10

要操作contact表中id10的记录的name字段,contact/10/name

要操作contact表中的所有记录,可以构建这样的路径:/contact

要操作的数据不一定来自数据库,也可以是文件等他存储方式,如下:

要操作xml文件中contact节点下的name节点,可以构建这样的路径:/contact/name

如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下:

Uriuri=Uri.parse("content://com.changcheng.provider.contactprovider/contact")

 

ContentProvider所提供的函数:

1 query():查询

2 insert():插入

3 update():更新

4 delete():删除

5 getType():得到数据类型

6 onCreate():创建时的回调函数

实现ContentProvider的过程

1 定义一个CONTENT_URI常量

2 定义一个类,继承ContentProvider

3 实现query,insert,update,delete,getType,onCreate方法

4 AndroidManifest.xml当中进行声明

下图是在一个应用使用ContentProvider来对数据库进行插入,查询所有,更新,查询所有的打印结果。源码可以在共享中的MyContentProvider中查看。



参考2:

http://www.cnblogs.com/weixing/p/3243115.html

补充:对于现在市面上很多Android设备,自带了一个大的存储空间,一般是8GB或16GB,并且又支持了Sdcard扩展,对于这样的设备,使用Enviroment.getExternalStorageDirectory()方法只能获取到设备自带的存储空间,对于另外扩展的Sdcard而言,需要修改路径。


继续参考:

http://www.jianshu.com/p/5fd3fac8f5f7

http://blog.csdn.net/itluochen/article/details/52605392

http://blog.csdn.net/hudashi/article/details/8037078

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值