四大组件之------------内容提供者ContentProvider
1.内容提供者(ContentProvider)
作用:应用程序中的数据对外进行共享,外界可以对该应用进行增删改查。如:通讯录
内容提供者的创建:
<1>.必须在应用程序的根包中创建一个类,该类继承ContentProvider
<2>配置AndroidManifest.xml文件,在应用节点下增加Provider节点
Name:类名 Authorities:唯一标识,表示内容提供者的唯一性
2.内容提供者用到的工具:
UriMatcher类:对路径进行判断。
UriMatcher MATCHER=new UriMatcher(UriMatcher.NO_MATCH);
常用方法:
UriMatcher.match(Uri)判断是否合法。
UriMatcher.addURI(“”)增加合法的路径。
ContentUris类:对路径进行修改。(静态类)
对路径中的参数进行提取:ContentUris.parseID(Uri)
增加字段:ContentUris.withAppendedId(uri, pid);
3.对某个接口内容提供者对外进行更新通知:
This.getContext().getContentResolver().notifyChange(uri,null)
4.使用内容提供者的方法:
<1>.构造路径<2>取得ContentResolver对象<3>调用Resolver的方法进行访问
Uri uri=Uri.parse("content://com.example.providers.personprovider/person");
ContentResolver Resolver=this.getContext().getContentResolver();
Resolver.insert(uri,values);
5.获得内容提供者的变化:
<1>构造路径,<2>取得ContentResolver对象<3>调用ContentResolver的registerContentObserver(uri,true,new PersonContentObserver(new Handler()))方法注册变化通知
private class PersonContentObserver extends ContentObserver{
public PersonContentObserver(Handler handler) {
super(handler);
}
public void onChange(boolean selfChange) {//当得到通知后进行查询最新数据
Uri uri=Uri.parse("content://com.example.providers.personprovider/person/query");
//select * from person order by personid desc limit 1
ContentResolver resolver=MainActivity.this.getContentResolver();
Cursor cursor=resolver.query(uri, null, null, null, "personid desc limit 1");
if(cursor.moveToFirst()){
Log.i("PersonContent", cursor.getString(cursor.getColumnIndex("name")));
}
else
Log.i("PersonContent", "错误");
}
}