android四大组件之一内容提供者contentprovider

contentprovider是android四大组件之一

作用是把数据暴露给其他应用,通常是把私有数据库的数据暴露给其他应用。

public class PersonProvider extends ContentProvider {
    public PersonProvider() {
    }

    //创建uri匹配器对象
    UriMatcher um = new UriMatcher(UriMatcher.NO_MATCH);

    //检测其他用户传入的uri与匹配器定义好的uri哪条匹配
    {
        um.addURI("com.demo.people", "people", 1);
        um.addURI("com.demo.people", "teacher", 2);
        um.addURI("com.demo.people", "people/#", 3);
    }

    //主机名携带路径
    //删除
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public String getType(Uri uri) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    //此方法供其他应用调用,用于往数据库插入数据
    //values:由其他应用传入,用于封装要插入的数据
    //uri:内容提供者的地址
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        if (um.match(uri) == 1) {
            //插入people
            //所有注册这个uri上的内容提供者都可以收到这个通知
            getContext().getContentResolver().notifyChange(uri, null);
  } else if (um.match(uri) == 2) { //插入teacher } else if (um.match(uri) == 3) { //uri末尾携带的数字取出来 long id=ContentUris.parseId(uri); } else { throw new IllegalArgumentException("有问题哟"); } return uri; } //创建时调用 @Override public boolean onCreate() { return false; } //查询 @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { throw new UnsupportedOperationException("Not yet implemented"); } //更新 @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { throw new UnsupportedOperationException("Not yet implemented"); }}
<provider
    android:name=".PersonProvider"
    android:authorities="com.demo.people"
    android:enabled="true"
    android:exported="true"></provider>
//从另一个应用通过ContentProvider插入数据
//拿到ContentResolver
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put("name", "name");
values.put("age", "age");
cr.insert(Uri.parse("content://com.demo.people/teacher"), values);
cr.delete(Uri.parse("content://com.demo.people"), "name = ?", new String[]{"demo"});
cr.update(Uri.parse("content://com.demo.people"), values, "name = ?", new String[]{"demo"});
Cursor cursor = cr.query(Uri.parse("content://com.demo.people"), null, null, null, null);
while (cursor.moveToNext()) {
    String name=cursor.getString(1);
}
//注册一个内容观察者,监听数据库的改变
//Uri:监听那个uri上的内容提供者的通知
//第二个参数如果是true,那么如果content://com.demo.people/数据库名,上的内容改变都会收到通知。
cr.registerContentObserver(Uri.parse("content://com.demo.people"),true,new MyObserver(new Handler()));
class MyObserver extends ContentObserver{

    public MyObserver(Handler handler) {
        super(handler);
    }
    //收到数据改变的通知,此方法会调用
    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值