第六章 内容提供者
内容提供者:调用其他应用数据
内容提供者简介:内容提供者(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代表的数据发生变化时,会触发该方法。