@@ -52,6 +52,7 @@ content://com.example.app.provider/table/#
52
52
53
53
### 4.2 MIME数据类型
54
54
55
+ - 解释:MIME:全称Multipurpose Internet Mail Extensions,多功能Internet 邮件扩充服务。它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
55
56
- 作用:指定某个扩展名的文件用某种应用程序来打开
56
57
如指定` .html ` 文件采用` text ` 应用程序打开、指定` .pdf ` 文件采用` flash ` 应用程序打开
57
58
- 具体使用:
@@ -241,40 +242,40 @@ long personid = ContentUris.parseId(uri);
241
242
### 4.6 UriMatcher类
242
243
243
244
- 作用
244
- 1 . 在` ContentProvider ` 中注册` URI `
245
+ 1 . 在` ContentProvider ` 中注册` URI `
245
246
2 . 根据 ` URI ` 匹配 ` ContentProvider ` 中对应的数据表
246
247
- 具体使用
247
248
248
249
``` Java
249
250
// 步骤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
+ // 即初始化时不匹配任何东西
253
254
254
255
// 步骤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
261
262
262
263
// 步骤3:根据URI 匹配 URI_CODE,从而匹配ContentProvider中相应的资源(match())
263
264
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" );
267
268
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;
273
274
// 如果根据URI匹配的返回码是URI_CODE_a,则返回ContentProvider中的名为tableNameUser1的表
274
- case URI_CODE_b :
275
- return tableNameUser2;
275
+ case URI_CODE_b :
276
+ return tableNameUser2;
276
277
// 如果根据URI匹配的返回码是URI_CODE_b,则返回ContentProvider中的名为tableNameUser2的表
277
- }
278
+ }
278
279
}
279
280
```
280
281
@@ -290,21 +291,21 @@ long personid = ContentUris.parseId(uri);
290
291
291
292
``` Java
292
293
// 步骤1:注册内容观察者ContentObserver
293
- getContentResolver(). registerContentObserver(uri);
294
- // 通过ContentResolver类进行注册,并指定需要观察的URI
294
+ getContentResolver(). registerContentObserver(uri);
295
+ // 通过ContentResolver类进行注册,并指定需要观察的URI
295
296
296
297
// 步骤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
+ }
303
304
}
304
305
305
306
// 步骤3:解除观察者
306
- getContentResolver(). unregisterContentObserver(uri);
307
- // 同样需要通过ContentResolver类进行解除
307
+ getContentResolver(). unregisterContentObserver(uri);
308
+ // 同样需要通过ContentResolver类进行解除
308
309
```
309
310
310
311
至此,关于` ContentProvider ` 的使用已经讲解完毕
@@ -381,10 +382,11 @@ public class MyProvider extends ContentProvider {
381
382
382
383
// UriMatcher类使用:在ContentProvider 中注册URI
383
384
private static final UriMatcher mMatcher;
384
- static {
385
+
386
+ static {
385
387
mMatcher = new UriMatcher (UriMatcher . NO_MATCH );
386
388
// 初始化
387
- mMatcher. addURI(AUTOHORITY ," user" , User_Code );
389
+ mMatcher. addURI(AUTOHORITY , " user" , User_Code );
388
390
mMatcher. addURI(AUTOHORITY , " job" , Job_Code );
389
391
// 若URI资源路径 = content://cn.scu.myprovider/user ,则返回注册码User_Code
390
392
// 若URI资源路径 = content://cn.scu.myprovider/job ,则返回注册码Job_Code
@@ -419,7 +421,6 @@ public class MyProvider extends ContentProvider {
419
421
/**
420
422
* 添加数据
421
423
*/
422
-
423
424
@Override
424
425
public Uri insert (Uri uri , ContentValues values ) {
425
426
@@ -438,7 +439,7 @@ public class MyProvider extends ContentProvider {
438
439
// System.out.println(personid);
439
440
440
441
return uri;
441
- }
442
+ }
442
443
443
444
/**
444
445
* 查询数据
@@ -455,7 +456,7 @@ public class MyProvider extends ContentProvider {
455
456
// System.out.println(personid);
456
457
457
458
// 查询数据
458
- return db. query(table,projection,selection,selectionArgs,null ,null ,sortOrder,null );
459
+ return db. query(table, projection, selection, selectionArgs, null , null , sortOrder, null );
459
460
}
460
461
461
462
/**
@@ -487,7 +488,7 @@ public class MyProvider extends ContentProvider {
487
488
/**
488
489
* 根据URI匹配 URI_CODE,从而匹配ContentProvider中相应的表名
489
490
*/
490
- private String getTableName (Uri uri ){
491
+ private String getTableName (Uri uri ) {
491
492
String tableName = null ;
492
493
switch (mMatcher. match(uri)) {
493
494
case User_Code :
@@ -498,17 +499,16 @@ public class MyProvider extends ContentProvider {
498
499
break ;
499
500
}
500
501
return tableName;
501
- }
502
502
}
503
+ }
503
504
```
504
505
505
506
** 步骤3:注册 创建的 ContentProvider类**
506
507
** AndroidManifest.xml**
507
508
508
- ``` java
509
+ ``` xml
509
510
<provider android : name =" MyProvider"
510
- android: authorities= " cn.scu.myprovider"
511
- / >
511
+ android : authorities =" cn.scu.myprovider" />
512
512
```
513
513
514
514
** 步骤4:进程内访问 ContentProvider中的数据**
0 commit comments