android studio之如何内容提供器

        所谓内容提供器,就是把自身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; }}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值