1. 理解
1). 為會么要有ContentProvider?
a. 數(shù)據(jù)庫文件只能當前應(yīng)用訪問, 別的應(yīng)用不能直接訪問
b. 在真實的應(yīng)用需求中, 可能需要應(yīng)用操作其它應(yīng)用的數(shù)據(jù)庫表數(shù)據(jù)
2). ContentProvider是什么?
ContentProvider是四大應(yīng)用組件之一
當前應(yīng)用使用ContentProvider將數(shù)據(jù)庫表數(shù)據(jù)操作暴露給其它應(yīng)用訪問
其它應(yīng)用需要使用ContentResolver來調(diào)用ContentProvider的方法
它們之間的調(diào)用是通過Uri來進行交流的
2. 相關(guān)API:
1). ContentProvider: 內(nèi)容提供者類
a. CRUD的方法: query(), insert(), update(), delete()
b. onCreate()\
a. CRUD的方法:
query(),
insert(),
update(),
delete()
b. 實現(xiàn)觀察的相關(guān)方法:
registContentObserver()
unRegistContentObserver()
notityChanged()
c.得到它的對象
context.getCOntentResolver();
3. ContentObserver: 內(nèi)容觀察者類
void onChange(boolean selfChange) : 數(shù)據(jù)改變, 且執(zhí)行了notityChanged()
4). Uri: 包含一個具有一定格式的字符串所對應(yīng)資源的類
A : 是一個前綴船庇,表示是由ContentProvider提供凰锡,固定不變
B : authority, 標識是哪個Provider,不同的Provider此部分必須不同萎坷。
C : 對應(yīng)于哪張表 student
D : id值, 對應(yīng)表中的哪條記錄
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 {
//實現(xiàn)inert、delete觅丰、update和query等方法
}
2). 在manifest.xml中注冊
android:name=".StudentContentProvider"
android:authorities="com.atguigu.provider.studentprovider"
android:exported="true"/>//標識是否允許其它應(yīng)用訪問,默認是false
4. 使用ContentResolver訪問ContentProvider
1). 得到ContentResolver的對象
2). 調(diào)用query(), delete(), update(), insert()方法調(diào)用ContentProvider對應(yīng)的方法
操作ContentResolver: 注冊, 解注冊, 通知