开发ContentProvider的步骤如下:
1.编写一个类,该类必须继承自ContentProvider。
2.实现ContentProvider类中的所有抽象方法:insert() delete() update() query()和getType()。
3.定义ContentProvider的URI。URI的形式为content://authority/path/param。一般情况下authority建议使用域名,因为域名是唯一的,不会重复。
4.在static块中使用UriMatcher对象映射Uri和返回码。代码如下:
1 static
2 {
3 //开始映射Uri和返回码
4 UriMatcher=new UriMatcher(UriMatcher.NO_MATCH);
5 UriMatcher.addURI(AUTHORITY,"cities",1);
6 UriMatcher.addURI(AUTHORITY,"code/#",2);//#表示任意数字
7 UriMatcher.addURI(AUTHORITY,"cities_in_province/*",3);//*表示任意字符
5.根据实际的需要实现相应的方法。例如:我们只想对数据进行只读操作,可以只实现query方法。insert、delete和update方法可以直接抛出异常即可。
6.实现query、insert、delete和update方法时要使用UriMatcher.match方法将URI映射成第四步与URI对应的代码(addURI方法的最后一个参数值),代码如下:
1 //实现query方法
2 public Cursor query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder)
3 {
4 Cursor cursor=null;
5 //根据Uri获取返回码
6 switch(UriMatcher.match(uri))
7 {
8 case 1:
9 ......
10 break;
11 case 2:
12 ......
13 break;
14 case 3:
15 ......
16 break;
17 default:
18 throw new IllegalArgumentException("<"+uri+">格式不正确。");
19 }
20 return cursor;
21 }
7.在AndroidManifest.xml文件中使用<provider>标签注册ContentProvider,代码如下:
<provider android:name="RegionContentProvider"
android:authorities="mobile.android.mydata"/>
其中,mobile.android.mydata就是在第四步中AUTHORITY的值。