Android中ContentProvider使用总结

最近一个小项目里用到了ContentProvider,这正好是我的薄弱环节,作为Android开发这么久,却很少接触ContentProvider的使用,正好借此机会学习总结一下。

在谈及ContentProvider之前,我想最好还是先聊一下Android中的数据,SQLite,这样我觉得更体系一些。

一、SQLite数据库

SQLite是一款轻型数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,占用资源非常小。支持多种操作系统。

二、SQLite的特点

1、轻量级

它是进程内的数据库引擎,不存在数据库的客户端和服务器,只需要带上它的动态库就能享受它的全部功能。

2、不需要安装

SQLite的核心引擎本身不依赖第三方软件,因此不需要安装

3、单一文件

数据库中所有信息都在一个文件内。

4、弱类型的字段

同一列中的数据可以是不同类型

三、SQLiteDataBase

Android提供了创建和使用SQLite数据库的API。SQLiteDataBase代表一个数据库对象,提供了操作数据库的一些方法。

1、openOrCreateDatabase方法

用于打开或创建数据库

2、insert方法

插入一条记录

3、delete方法

删除一条记录

4、query方法

查询一条记录

5、update方法

修改记录

6、execSQL方法

执行一条SQL语句

7、close方法

关闭数据库

四、使用细节

在我们使用数据库前,首先要做的就是打开或创建数据库。

之后创建表,创建表一般是使用SQL语句来创建。

之后就是常用的增删改查,插入有两种方法。一种是使用insert方法,插入ContentValues封装类。类里存储了列名称和列值得map。另外一种就是使用传统的SQL语句方法插入。其它的操作,也是分为两种,分别是提供的API和传统的SQL语句方式。

五、SQLiteOpenHelper

这个类是SQLiteDataBase的一个辅助类,这个类主要是生成一个数据库,并对数据库的版本进行管理。当调用它的可写或可读方法时,若数据库不存在,则创建一个数据库。这个类是一个抽象类,通常我们要继承并实现它的3个方法。

1、onCreate

在数据库第一次生成时调用这个方法。一般是在这一步生成表

2、onUpgrade

当数据库需要升级时调用。一般是删除旧表或建立新表在这一步。

3、onOpen

这个是当打开数据库时回调,一般不常用。

六、ContentProvider

经过前面的铺垫,现在可以来说说ContentProvider的使用方法了。

1、定义

ContentProvider是内容提供者,是Android四大组件之一。

2、作用

用于进程间数据的交互共享,即跨进程通信。其作为数据源的搬运工的角色。数据源可以是数据库数据如SQLite,文件,XML,网络等等。

3、原理

底层采用Android中的Binder机制,后续找时间展开

4、具体使用

4.1 统一资源标识符(URI)

外界进程通过URI找到对应的ContentProvider和其中的数据,在进行数据操作。

URI分为系统预置和自定义两部分。分别对应系统内置的数据如通讯录日程表等,还有自己定义的数据库。

自定义URI = 主题名 + 授权信息 + 表名 + 记录

通过上述组合就可以定位到具体到数据库中某一表中某一个数据。

值得注意的是,URI模式支持通配符匹配,可以使用通配符匹配任意长度的数据

4.2 MIME数据类型

作用:指定某个扩展名的文件用某种应用程序打开。

MIME类型由类型+子类型组成

例如text/css text/xml application/pdf

4.3 ContentProvider类

此类组织数据的方式主要是表格形式,同时也支持文件数据

主要方法如下

insert,delete,update,query

值得注意的是,如果是在多线程并发访问的时候使用,需要实现同步。

4.4 ContentResolver类

此类用于管理不同的ContentProvider间的操作。通过URI可以操作不同ContentProvider种的数据,外部进程通过ContentResolver类从而与ContentProvider类进行交互

4.5 ContentUris类

此类用于辅助ContentProvider,用于操作URI。可以通过withAppendedId方法向URI追加一个id。

可以通过parse方法从URL中获取ID。

4.6 UriMatcher类

此类用于辅助ContentProvider,用于在ContentProvider中注册URI。根据URI匹配ContentProvider中对应的数据表。

经过注册后, 就可以在使用uri时通过匹配不同的结果在switch语句里做不同的处理了。

4.7 ContentObserver类

此类用于辅助ContentProvider,用于内容观察者。观察Uri引起ContentProvider中数据变化并通知外界。使用时通过uri注册,当该uri的ContentProvider的数据发生变化时,通知外界。

5 进程间访问注意事项

ContentProvider是四大组件之一,在使用时要在Manifest文件里注册,并声明相关权限,这样才能保证被其它进程访问等操作。

猜你喜欢

转载自blog.csdn.net/Kongou/article/details/81774901