ContentProvider基础

来源:互联网 发布:小白素材vip源码 编辑:程序博客网 时间:2024/04/30 14:11

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
0 0