所谓内容提供器,就是把自身app的数据共享给别的app时应该设置的一个容器,它的实施和uri十分密切,所以不知道uri的可以先去了解一下,了解一下它的标准格式也是很重要的,其实实现起来也很简单,只是把uri和SQLite的各个方法结合起来就可以了
package com.example.gdzc.myapplication;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
public class MyContentProvider extends ContentProvider {
public static final int BOOK_DIR=0;
public static final int BOOK_ITEM=1;
public static final int CATEGORY_DIR=2;
public static final int CATEGORY_ITEM=3;
public static final String AUTHORITY="com.example.gdzc.myapplication.provider";
private static UriMatcher uriMatcher;
private MydatabaseHelper mydatabaseHelper;
static {
uriMatcher=new UriMatcher(UriMatcher.NO_MATCH);//这是一个uri和一个常量绑定起来的工具
uriMatcher.addURI(AUTHORITY,"book",BOOK_DIR);//这个语句的意思就是,把BOOK_DIR与AUTHORITY.book绑定起来,若方法match()接收到这个uri时,就会返回这个常量
uriMatcher.addURI(AUTHORITY,"book/#",BOOK_ITEM);
uriMatcher.addURI(AUTHORITY,"category",CATEGORY_DIR);
uriMatcher.addURI(AUTHORITY,"category/#",CATEGORY_ITEM);
} public MyContentProvider() { } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { SQLiteDatabase db=mydatabaseHelper.getWritableDatabase(); int ans=0; switch (uriMatcher.match(uri)) { case BOOK_DIR: ans=db.delete("Book",selection,selectionArgs); break; case BOOK_ITEM: String bookId=uri.getPathSegments().get(1); ans=db.delete("Book","id=?",new String[]{bookId}); break; case CATEGORY_DIR: ans=db.delete("Category",selection,selectionArgs); break; case CATEGORY_ITEM: String cateId=uri.getPathSegments().get(1); ans=db.delete("Category","id=?",new String[]{cateId}); break; default: break; } return ans; } @Override public String getType(Uri uri) { switch (uriMatcher.match(uri)) { case BOOK_DIR: return "vnd.android.cursor.dir/vnd.com.example.gdzc.application.provider.book"; case BOOK_ITEM: return "vnd.android.cursor.item/vnd.com.example.gdzc.application.provider.book"; case CATEGORY_DIR: return "vnd.android.cursor.dir/vnd.com.example.gdzc.application.provider.category"; case CATEGORY_ITEM: return "vnd.android.cursor.item/vnd.com.example.gdzc.application.provider.category"; } return null; } @Override public Uri insert(Uri uri, ContentValues values) { SQLiteDatabase db=mydatabaseHelper.getWritableDatabase(); Uri uriRrturn =null; switch(uriMatcher.match(uri)) { case BOOK_DIR: case BOOK_ITEM: long netBookId=db.insert("Book",null,values); uriRrturn=Uri.parse("content//"+AUTHORITY+"/book/"+netBookId); break; case CATEGORY_DIR: case CATEGORY_ITEM: long netCateId=db.insert("Category",null,values); uriRrturn=Uri.parse("content//"+AUTHORITY+"/book/"+netCateId); break; default: break; } return uriRrturn; } @Override public boolean onCreate() { mydatabaseHelper=new MydatabaseHelper(getContext(),"BookStore.db",null,2); return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteDatabase db=mydatabaseHelper.getReadableDatabase(); Cursor cursor=null; switch (uriMatcher.match(uri)) { case BOOK_DIR: 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 cateId=uri.getPathSegments().get(1); cursor=db.query("Category",projection,"id=?",new String[]{cateId},null,null,sortOrder); break; default: break; } return cursor; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { SQLiteDatabase db=mydatabaseHelper.getWritableDatabase(); int udpateRow=0; switch (uriMatcher.match(uri)) { case BOOK_DIR: udpateRow=db.update("Book",values,selection,selectionArgs); break; case BOOK_ITEM: String bookId=uri.getPathSegments().get(1); udpateRow=db.update("Book",values,"id=?",new String[]{bookId}); break; case CATEGORY_DIR: udpateRow=db.update("Category",values,selection,selectionArgs); break; case CATEGORY_ITEM: String cateId=uri.getPathSegments().get(1); udpateRow=db.update("Category",values,"id=?",new String[]{cateId}); break; default: break; } return udpateRow; }}