21、内容提供者1

第六章 内容提供者

内容提供者:调用其他应用数据

内容提供者简介:内容提供者(ContentProvider)是Android系统四大组件之一,用于保存和检索数据,是Android系统中不同应用程序之间共享数据的接口。
ContentProvider是不同应用程序之间进行数据交换的标准API,以Uri形式对外提供数据,允许其他应用操作本应用数据。其他应用则使用ContentResolver,并根据ContentProvider提供的Uri操作指定数据。

创建一个内容提供者
定义一个类继承android.content包下的ContentProvider类(抽象类)。子类需要重写它的onCreate()、delete()、getType()、insert()、query()、update()这几个抽象方法。
ContentProvider是四大组件之一,必须要在清单文件中注册


Uri简介
ContentProvider的几个抽象方法,这几个抽象方法中有一个参数Uri,它代表了数据的操作方法。Uri是由scheme、authorites、path三部分组成。

1.使用步骤
创建内容提供者:
内容提供者:
1.创建自定义类继承父类ContentProvider
2.重写抽象父类的方法
3.构建Uri解析器
4.添加构建访问Uri:数据增删改查:api
5.注册内容提供者

2.内容访问者
内容访问者:
1.获取提供者:getContentResolver();
ContentResolver 对象
2.访问内容提供者:增删改查
ContentResolver resolver= getContentResolver(); Uri uri=Uri.parse(“content://com.provider111/query”); Cursor cursor= resolver.query(uri,null,null,null,null); if(cursor!=null&&cursor.getCount()>0){ while (cursor.moveToNext()){ long _id=cursor.getInt(0); String sname=cursor.getString(1); String sno=cursor.getString(2); String sex=cursor.getString(3); int img=cursor.getInt(4); Student student=new Student(_id,sname,sno,sex,img); System.out.println(student); }
3.内容观察者使用
1.注册内容观察者
Uri uri2=Uri.parse(“content://com.provider/delete”); //注册层内容观察者 resolver.registerContentObserver(uri2, true, new ContentObserver(new Handler()) { //监听内容提供者数据发生改变 public void onChange(boolean selfChange) { super.onChange(selfChange); System.out.println(“数据发生改变…”); } });

2.在内容提供者添加通知内容观察者代码
insert、update 、delete 方法中
Uri uri2=Uri.parse(“content://com.provider/insert”); getContext().getContentResolver().notifyChange(uri2,null);

ContentResolver的基本用法
在Android系统中,ContentResolver充当着桥梁的角色。应用程序通过ContentProvider暴露自己的数据,通过ContentResolver对应用程序暴露的数据进行操作。

通过ContentResovler对象实现数据的操作代码如下:
Uri uri = Uri.parse(“content://cn.itcast.db.personprovider/person”);
ContentResolver resolver = context.getContentResolver();
Cursor cursor = resolver.query(uri, new String[] { “address”, “date”,“type”, “body” }, null, null, null);
while (cursor.moveToNext()) {
String address = cursor.getString(0);
…………
}
cursor.close();
void ContentObserver(Handler handler) ContentObserver的派生类都需要调用该构造方法。参数可以是主线程Handler(可以更新UI ),也可以是任何Handler对象。
public void onChange(boolean selfChange) 当观察到的Uri代表的数据发生变化时,会触发该方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值