Contentprovider的基本用法

在前两年的开发中我们是很少看到ContentProvider的情况,但随着社会的进步数据化的东西越来越多,进而需要各种数据访问也就越来越多。android提供了ContentProvider来应对不同应用间的数据访问。下面我们就对ContentProvider进行一个简单的用法介绍;

在数据存储端

  1. 继承ContentPovider;
  2. AndroidManifest.xml中配置;
  3. 在ContentProvider中匹配访问地址的正确性;
  4. 得到ContentResolver传递过来的参数;(与第6步对应)
  5. 操作数据库;

数据访问端;

6.ContentResolver传递Uri地址,以及要操纵数据库CRUD的对应参数给ContentProvider的CRUD方法;(与第3.4步对应)

我们根据上面的思路来一一实现

首先继承ContentProvider重写对应的方法;

public class ContentProvideDemo extends ContentProvider {
    private static final String TAG = ContentProvideDemo.class.getSimpleName();

    @Override
    public boolean onCreate() {
        return true;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        Log.d(TAG, "query: enter");
        System.out.print("uri = " + uri);
        return null;
    }

    @Override
    public String getType(Uri uri) {
        Log.d(TAG, "getType: enter");
        return null;
    }


    @Override
    public Uri insert(Uri uri, ContentValues values) {
        Log.d(TAG, "insert: enter");
        return null;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        Log.d(TAG, "delete: enter");
        return 0;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        Log.d(TAG, "update: enter");
        return 0;
    }
}

AndroidManifest.xml中配置;

<provider
android:name=".ContentProvideDemo"           android:authorities="com.example.concentrated"
android:exported="true"/>
//这里的authorities相当于协议。
//exported="true"表示能被外界访问;

在ContentProvider中匹配访问地址的正确性;

    private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);

    static {
        //为UriMatcher注册两个Uri;
        /*
        String authority, 协议也就是AndroidManifaset.xml文件中配置的authority;
        String path,与authority组成一个uri 这里都是自己给出的,因为uri的地址是自己创建的;
        int code,code为uri的标示码;
         */
        matcher.addURI("com.example.concentrated", "words", 6);
        //#号为通配符;
        matcher.addURI("com.example.concentrated", "word/#", 3);
        //下面说面下这两种配法的意思
        /*第一种为标准写法,为常用状态。也就是说当ContentResolver的Uri中的id与addURI中的code一至时才返回code
          值不然就返回-1;
          第二种,#号为通配符。ContentResolver的Uri中的id不管是什么值,都会返回addURI中的code值;
         */
    }

得到ContentResolver传递过来的参数;(与第6步对应)

操作数据库;

ContentResolver传递Uri地址,以及要操纵数据库CRUD的对应参数给ContentProvider的CRUD方法;(与第3.4步对应)

//在ContentResolver中uri的ID值有两种方法
//方法一:
Uri uri = Uri.parse("content://com.example.concentrated/words/6");
//方法二:通过ContentUris的API方法添加id值;
Uri mUri = Uri.parse("content://com.example.concentrated/words");
Uri uri = ContentUris.withAppendedId(mUri, 6);
//ContentUris也可以对uri的id值进行解析;
long wordId = ContenUris.parseId(uri);//获得结果为6;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值