Android四大组件之ContentProvider

1. 理解

1). 为会么要有ContentProvider?

a. 数据库文件只能当前应用访问, 别的应用不能直接访问

b. 在真实的应用需求中, 可能需要应用操作其它应用的数据库表数据

2). ContentProvider是什么?

ContentProvider是四大应用组件之一

当前应用使用ContentProvider将数据库表数据操作暴露给其它应用访问

其它应用需要使用ContentResolver来调用ContentProvider的方法

它们之间的调用是通过Uri来进行交流的

2. 相关API:

1). ContentProvider: 内容提供者类

a. CRUD的方法: query(), insert(), update(), delete()

b. onCreate()\

a. CRUD的方法:

query(),

insert(),

update(),

delete()

b. 实现观察的相关方法:

registContentObserver()

unRegistContentObserver()

notityChanged()

c.得到它的对象

context.getCOntentResolver();

3. ContentObserver: 内容观察者类

void onChange(boolean selfChange) : 数据改变, 且执行了notityChanged()

4). Uri: 包含一个具有一定格式的字符串所对应资源的类

Android四大组件之ContentProvider_第1张图片

A : 是一个前缀,表示是由ContentProvider提供,固定不变

B : authority, 标识是哪个Provider,不同的Provider此部分必须不同。

C : 对应于哪张表 student

D : id值, 对应表中的哪条记录

5). UriMatcher: 用来识别uri的一个uri容器

//添加一个合法的URI

void addURI(String authority, String path, int code)

//匹配指定的uri, 返回匹配码

int match(Uri uri)

6). ContentUris: 操作uri的工具类

//解析uri, 得到其中的id

long parseId(Uri contentUri)

//添加id到指定的uri中

Uri withAppendedId(Uri contentUri, long id)

3. 自定义ContentProvider

1).编写ContentProvider子类

class StudentContentProvider extends ContentProvider {

//实现inert、delete、update和query等方法

}

2). 在manifest.xml中注册

android:name=".StudentContentProvider"

android:authorities="com.atguigu.provider.studentprovider"

android:exported="true"/>//标识是否允许其它应用访问,默认是false

4. 使用ContentResolver访问ContentProvider

1). 得到ContentResolver的对象

2). 调用query(), delete(), update(), insert()方法调用ContentProvider对应的方法

操作ContentResolver: 注册, 解注册, 通知

你可能感兴趣的:(Android四大组件之ContentProvider)