四大组件之内容提供者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", "错误");

                   }

    }

原文地址:https://www.cnblogs.com/lvfeilong/p/345e.html