您的位置:首页 > 移动开发 > Android开发

《第一行代码-Android》学习笔记(十三)

2015-02-14 23:38 573 查看
如何实现自己的content provider:

1.创建内容提供器:

a) 编写一个类去继承ContentProvider类,并实现里面的六个方法:

i. onCreate():初始化的时候会调用,只有当存在ContentResolver尝试访问内容提供器的时候它才会被初始化

ii. query():

iii. update():

iv. delete():

v. insert():

vi. getType():更加传入的Uri返回相应的MIME类型。

b) URI格式:

i. content://com.gu.demo.provider/*:表示匹配任意表

ii. content://com.gu.demo.provider/table1/#:表示匹配table1表中任意一行。

最后可以借助UriMatcher这个类进行对不同的Uri分类匹配。

static

{

uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

uriMatcher.addURI(AUTHORITY, "book", BOOK_DIR);

uriMatcher.addURI(AUTHORITY, "book/#", BOOK_ITEM);

}

switch(uriMatcher.match(uri))

{

case BOOK_DIR :

cursor = db.query(DBHelper.TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder);

break;

case BOOK_ITEM :

String bookId = uri.getPathSegments().get(1);

cursor = db.query(DBHelper.TABLE_NAME, projection, "id=?", new String[] { bookId }, null, null,sortOrder);

break;

default:

break;

}

c) 在Content provider项目中的配置文件中需要对provider进行配置:

<provider

android:name="com.gu.demo.provider.BookProvider"

android:authorities="com.gu.demo.provider"

android:exported="true" >

</provider>

此处会有黄色警告,警告应用数据会因此被外界访问的危险。并且这里的 android:exported="true" 必须要配置,否则外界将无法访问此content provider。

d) 在另一个项目中利用contentResolver对象和Uri定位到设计好的content provider中,进行相应的访问。

Uri uri = Uri.parse("content://com.gu.demo.provider/book/1");

Cursor cursor = this.getContentResolver().query(uri, null, null, null, null);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: