Skip to content

Commit c2270c6

Browse files
committed
调整ContentProvider全方位解析文章中的细节
1 parent f74ad21 commit c2270c6

File tree

1 file changed

+41
-41
lines changed

1 file changed

+41
-41
lines changed

android/basis/ContentProvider.md

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ content://com.example.app.provider/table/#
5252

5353
### 4.2 MIME数据类型
5454

55+
- 解释:MIME:全称Multipurpose Internet Mail Extensions,多功能Internet 邮件扩充服务。它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
5556
- 作用:指定某个扩展名的文件用某种应用程序来打开
5657
如指定`.html`文件采用`text`应用程序打开、指定`.pdf`文件采用`flash`应用程序打开
5758
- 具体使用:
@@ -241,40 +242,40 @@ long personid = ContentUris.parseId(uri);
241242
### 4.6 UriMatcher类
242243

243244
- 作用
244-
1.`ContentProvider` 中注册`URI`
245+
1.`ContentProvider` 中注册`URI`
245246
2. 根据 `URI` 匹配 `ContentProvider` 中对应的数据表
246247
- 具体使用
247248

248249
```Java
249250
// 步骤1:初始化UriMatcher对象
250-
UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
251-
//常量UriMatcher.NO_MATCH = 不匹配任何路径的返回码
252-
// 即初始化时不匹配任何东西
251+
UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
252+
//常量UriMatcher.NO_MATCH = 不匹配任何路径的返回码
253+
// 即初始化时不匹配任何东西
253254

254255
// 步骤2:在ContentProvider 中注册URI(addURI())
255-
int URI_CODE_a = 1
256-
int URI_CODE_b = 2
257-
matcher.addURI("cn.scu.myprovider", "user1", URI_CODE_a);
258-
matcher.addURI("cn.scu.myprovider", "user2", URI_CODE_b);
259-
// 若URI资源路径 = content://cn.scu.myprovider/user1 ,则返回注册码URI_CODE_a
260-
// 若URI资源路径 = content://cn.scu.myprovider/user2 ,则返回注册码URI_CODE_b
256+
int URI_CODE_a = 1
257+
int URI_CODE_b = 2
258+
matcher.addURI("cn.scu.myprovider", "user1", URI_CODE_a);
259+
matcher.addURI("cn.scu.myprovider", "user2", URI_CODE_b);
260+
// 若URI资源路径 = content://cn.scu.myprovider/user1 ,则返回注册码URI_CODE_a
261+
// 若URI资源路径 = content://cn.scu.myprovider/user2 ,则返回注册码URI_CODE_b
261262

262263
// 步骤3:根据URI 匹配 URI_CODE,从而匹配ContentProvider中相应的资源(match())
263264

264-
@Override
265-
public String getType(Uri uri) {
266-
Uri uri = Uri.parse(" content://cn.scu.myprovider/user1");
265+
@Override
266+
public String getType (Uri uri){
267+
Uri uri = Uri.parse(" content://cn.scu.myprovider/user1");
267268

268-
switch(matcher.match(uri)){
269-
// 根据URI匹配的返回码是URI_CODE_a
270-
// 即matcher.match(uri) == URI_CODE_a
271-
case URI_CODE_a:
272-
return tableNameUser1;
269+
switch (matcher.match(uri)) {
270+
// 根据URI匹配的返回码是URI_CODE_a
271+
// 即matcher.match(uri) == URI_CODE_a
272+
case URI_CODE_a:
273+
return tableNameUser1;
273274
// 如果根据URI匹配的返回码是URI_CODE_a,则返回ContentProvider中的名为tableNameUser1的表
274-
case URI_CODE_b:
275-
return tableNameUser2;
275+
case URI_CODE_b:
276+
return tableNameUser2;
276277
// 如果根据URI匹配的返回码是URI_CODE_b,则返回ContentProvider中的名为tableNameUser2的表
277-
}
278+
}
278279
}
279280
```
280281

@@ -290,21 +291,21 @@ long personid = ContentUris.parseId(uri);
290291

291292
```Java
292293
// 步骤1:注册内容观察者ContentObserver
293-
getContentResolver().registerContentObserver(uri);
294-
// 通过ContentResolver类进行注册,并指定需要观察的URI
294+
getContentResolver().registerContentObserver(uri);
295+
// 通过ContentResolver类进行注册,并指定需要观察的URI
295296

296297
// 步骤2:当该URI的ContentProvider数据发生变化时,通知外界(即访问该ContentProvider数据的访问者)
297-
public class UserContentProvider extends ContentProvider {
298-
public Uri insert(Uri uri, ContentValues values) {
299-
db.insert("user", "userid", values);
300-
getContext().getContentResolver().notifyChange(uri, null);
301-
// 通知访问者
302-
}
298+
public class UserContentProvider extends ContentProvider {
299+
public Uri insert(Uri uri, ContentValues values) {
300+
db.insert("user", "userid", values);
301+
getContext().getContentResolver().notifyChange(uri, null);
302+
// 通知访问者
303+
}
303304
}
304305

305306
// 步骤3:解除观察者
306-
getContentResolver().unregisterContentObserver(uri);
307-
// 同样需要通过ContentResolver类进行解除
307+
getContentResolver().unregisterContentObserver(uri);
308+
// 同样需要通过ContentResolver类进行解除
308309
```
309310

310311
至此,关于`ContentProvider`的使用已经讲解完毕
@@ -381,10 +382,11 @@ public class MyProvider extends ContentProvider {
381382

382383
// UriMatcher类使用:在ContentProvider 中注册URI
383384
private static final UriMatcher mMatcher;
384-
static{
385+
386+
static {
385387
mMatcher = new UriMatcher(UriMatcher.NO_MATCH);
386388
// 初始化
387-
mMatcher.addURI(AUTOHORITY,"user", User_Code);
389+
mMatcher.addURI(AUTOHORITY, "user", User_Code);
388390
mMatcher.addURI(AUTOHORITY, "job", Job_Code);
389391
// 若URI资源路径 = content://cn.scu.myprovider/user ,则返回注册码User_Code
390392
// 若URI资源路径 = content://cn.scu.myprovider/job ,则返回注册码Job_Code
@@ -419,7 +421,6 @@ public class MyProvider extends ContentProvider {
419421
/**
420422
* 添加数据
421423
*/
422-
423424
@Override
424425
public Uri insert(Uri uri, ContentValues values) {
425426

@@ -438,7 +439,7 @@ public class MyProvider extends ContentProvider {
438439
// System.out.println(personid);
439440

440441
return uri;
441-
}
442+
}
442443

443444
/**
444445
* 查询数据
@@ -455,7 +456,7 @@ public class MyProvider extends ContentProvider {
455456
// System.out.println(personid);
456457

457458
// 查询数据
458-
return db.query(table,projection,selection,selectionArgs,null,null,sortOrder,null);
459+
return db.query(table, projection, selection, selectionArgs, null, null, sortOrder, null);
459460
}
460461

461462
/**
@@ -487,7 +488,7 @@ public class MyProvider extends ContentProvider {
487488
/**
488489
* 根据URI匹配 URI_CODE,从而匹配ContentProvider中相应的表名
489490
*/
490-
private String getTableName(Uri uri){
491+
private String getTableName(Uri uri) {
491492
String tableName = null;
492493
switch (mMatcher.match(uri)) {
493494
case User_Code:
@@ -498,17 +499,16 @@ public class MyProvider extends ContentProvider {
498499
break;
499500
}
500501
return tableName;
501-
}
502502
}
503+
}
503504
```
504505

505506
**步骤3:注册 创建的 ContentProvider类**
506507
**AndroidManifest.xml**
507508

508-
```java
509+
``` xml
509510
<provider android:name="MyProvider"
510-
android:authorities="cn.scu.myprovider"
511-
/>
511+
android:authorities="cn.scu.myprovider"/>
512512
```
513513

514514
**步骤4:进程内访问 ContentProvider中的数据**

0 commit comments

Comments
 (0)