ContentProvider 详解

栏目: 数据库 · 发布时间: 6年前

内容简介:ContentProvider 通过 uri 来标识其它应用要访问的数据,通过 ContentResolver 的 query,update,insert,delete.(CRUD)方法实现对共享数据的操作。还可以通过注册 ContentObserver 来监听数据是否发生了变化来对应的刷新页面,接下来我们就来介绍一下onCreate在创建 ContentProvider 时使用query用于查询指定 uri 的数据返回一个 Cursor

ContentProvider 通过 uri 来标识其它应用要访问的数据,通过 ContentResolver 的 query,update,insert,delete.(CRUD)方法实现对共享数据的操作。还可以通过注册 ContentObserver 来监听数据是否发生了变化来对应的刷新页面,接下来我们就来介绍一下

onCreate在创建 ContentProvider 时使用

query用于查询指定 uri 的数据返回一个 Cursor

insert用于向指定 uri 的 ContentProvider 中添加数据

delete用于删除指定 uri 的数据

update用户更新指定 uri 的数据

getType用于返回指定的 Uri 中的数据 MIME 类型

ContentResolver 通过 uri 来定位自己要访问的数据,uri 的格式:[scheme:][//host:port][path][?query]

CRUD 实例代码如下:

ContentResolver resolver = getContentResolver();
Uri uri = Uri.parse("content://com.madreain.provider.myprovider/tablename");

//添加一条记录
ContentValues values = new ContentValues();
values.put("name", "madreain");
values.put("age", 26);
resolver.insert(uri, values);

//获取tablename表中所有记录
Cursor cursor = resolver.query(uri, null, null, null, "tablename data");
while(cursor.moveToNext()){
   Log.i("ContentTest", "tablename_id="+ cursor.getInt(0)+ ", name="+ cursor.getString(1));
}

//把id为1的记录的name字段值更改新为zhang1
ContentValues updateValues = new ContentValues();
updateValues.put("name", "zhang1");
Uri updateIdUri = ContentUris.withAppendedId(uri, 2);
resolver.update(updateIdUri, updateValues, null, null);

//删除id为2的记录,即字段age
Uri deleteIdUri = ContentUris.withAppendedId(uri, 2);
resolver.delete(deleteIdUri, null, null);

复制代码

com.madreain.provider.myprovider 需要在 AndroidManifest.xml 中进行注册

<provider android:name="MyProvider" 
          android:authorities="com.madreain.provider.myprovider" 
          android:enabled="true"
          android:exported="true"/>
复制代码

ContentObserver

介绍一下 ContentProvider、ContentResolver、ContentObserver 之间的关系: ContentProvider——内容提供者, 在 android 中的作用是对外共享数据,也就是说你可以通过 ContentProvider 把应用中的数据共享给其他应用访问,其他应用可以通过 ContentProvider 对你应用中的数据进行添删改查。 ContentResolver——内容解析者, 其作用是按照一定规则访问内容提供者的数据(其实就是调用内容提供者自定义的接口来操作它的数据)。 ContentObserver——内容观察者,目的是观察(捕捉)特定 Uri 引起的数据库的变化,继而做一些相应的处理,它类似于数据库技术中的触发器(Trigger),当 ContentObserver 所观察的 Uri 发生变化时,便会触发它。

内容观察者,观察特定 Uri 引起的数据库的变化,继而做一些相应的处理,当 ContentObserver 所观察的 Uri 发生变化时,便会触发它回调 onChange 方法

继承 ContentObserver,实现 onChange 方法

public class MObserver extends ContentObserver{
        public MObserver(Handler handler){
            super(handler);
        }


        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            queryDb();
        }
    }
复制代码

在 AActivity 中注册和注销

//注册
MObserver mContentObserver = new MObserver(new Handler(),this);
getContentResolver().registerContentObserver(Madreain.CONTENT_URI_DELETE,true, mContentObserver);

//注销
getContentResolver().unregisterContentObserver(mContentObserver);

复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

商战

商战

杰克•特劳特、阿尔•里斯 / 李正栓、李腾 / 机械工业出版社 / 2011-3 / 42.00元

本书重点阐述了商战中的四种常用战略形式,如防御战、进攻战、侧翼战和游击战,针对每一种形式又提出了三条应遵循的原则,以及如何在具体的商战中应用这些原则。本书分析了商战中的实际案例:可口可乐与百事可乐的战役,汉堡王与温迪斯对麦当劳的挑战以及DEC对阵IBM等。这些人们熟知品牌的案例在作者精心的组织下,使读者不仅加深了对本书中心思想的理解,而且学习了如何在实战中具体应用各种营销战略和策略的技巧。 ......一起来看看 《商战》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试