您的位置:首页 > 编程语言 > PHP开发

ContentProvider基础

2016-05-19 20:06 429 查看
ContentProvider应该和SqliteDataBase一起使用

使用方法:

一、新建ContentProvider实现类
1.实现query,insert,update,delete,getType五个方法
2.定义自定义代码(用于UriMather匹配Uri,然后进行判断使用哪个Uri)
3.初始化UriMather
4.实现1.中五个方法具体内容
例如query:


public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
SQLiteDatabase db =  myHelper.getReadableDatabase();
Cursor cursor = null;
switch (uriMatcher.match(uri)){
case BOOK_DIR:
//  查询Book表中的所有数据
cursor = db.query("Book",projection, selection, selectionArgs, null, null,sortOrder);
break;
case BOOK_ITEM:
String bookId = uri.getPathSegments().get(1);
cursor = db.query("Book",projection, "id = ?", new String []{bookId}, null, null,sortOrder);
break;
case CATEGORY_DIR:
cursor = db.query("Category",projection, selection, selectionArgs, null, null,sortOrder);
break;
case CATEGORY_ITEM:
String categoryId = uri.getPathSegments().get(1);
cursor = db.query("Category", projection, "id = ?", new String[]
{ categoryId }, null, null, sortOrder);
break;
default:
break;
}
return cursor;
}


insert:
public Uri insert(Uri uri, ContentValues contentValues) {
// 添加数据
SQLiteDatabase db = myHelper.getWritableDatabase();
Uri uriReturn = null;
switch (uriMatcher.match(uri)) {
case BOOK_DIR:
case BOOK_ITEM:
long newBookId = db.insert("Book", null, contentValues);
uriReturn = Uri.parse("content://" + AUTHORITY + "/book/" +
newBookId);
break;
case CATEGORY_DIR:
case CATEGORY_ITEM:
long newCategoryId = db.insert("Category", null, contentValues);
uriReturn = Uri.parse("content://" + AUTHORITY + "/category/" +
newCategoryId);
break;
default:
break;
}
return uriReturn;
}

getType:获取 Uri 对象所对应的 MIME 类型
public String getType(Uri uri){
switch (uriMatcher.match(uri)) {
case BOOK_DIR:
return "vnd.android.cursor.dir/vnd.fzd.com.content.provider.book";
case BOOK_ITEM:
return "vnd.android.cursor.item/vnd.fzd.com.content.provider.book";
case CATEGORY_DIR:
return "vnd.android.cursor.dir/vnd.fzd.com.content.provider.category";
case CATEGORY_ITEM:
return "vnd.android.cursor.item/vnd.fzd.com.content.provider.category";
default:
break;
}
return null;
}


二、MEME类型命名规则

1. 必须以 vnd 开头。
2. 如果内容 URI 以路径结尾,则后接 android.cursor.dir/,如果内容 URI 以 id 结尾,
则后接 android.cursor.item/。
3. 最后接上 vnd.<authority>.<path>。
所以,对于 content://com.example.app.provider/table1 这个内容 URI,它所对应的 MIME
类型就可以写成:
vnd.android.cursor.dir/vnd.com.example.app.provider.table1
对于 content://com.example.app.provider/table1/1 这个内容 URI,它所对应的 MIME 类型
就可以写成:
vnd.android.cursor.item/vnd.com.example.app.provider.table1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: