1、定义一个 CONTENT_URI 常量。
2、定义一个类 继承ContentProvider 。
3、实现 query,update,insert,delete,getType 和onCreate放法。
4、在AndroidManifest.xml 中声明
在application 标签中加入:
<provider android:name="com.sslinm.FirstContentProvider"
android:authorities="com.sslinm.FirstContentProvider"/>
为了数据的通用性
在provicer当中,根据uri 来判断,这个uri请求应该进行怎样的处理:(以query 方法为例)
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
System.out.println(" in the query method ");
SQLiteQueryBuilder sqlB = new SQLiteQueryBuilder();
// 条件过滤判断,符合那个uri条件进入那个分支
int match = uriMatcher.match(uri);
System.out.println(match+" is match");
switch(match){
case INCOMING_USER_COLLECTION :
sqlB.setTables(UserTableMetaData.TABLE_NAME);
sqlB.setProjectionMap(userProjectMap);
break;
case INCOMING_USER_SINGLE :
sqlB.setTables(UserTableMetaData.TABLE_NAME);
sqlB.setProjectionMap(userProjectMap);
// 单个查询的条件
sqlB.appendWhere(UserTableMetaData._ID+"="+uri.getPathSegments().get(1));
break;
default:throw new RuntimeException(" no match uri !!");
}
// 判断orderBy字句
String orderBy;
if(TextUtils.isEmpty(sortOrder)){
orderBy = UserTableMetaData.DEFAULT_SORT_ORDER;
}else{
orderBy = sortOrder;
}
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = sqlB.query(db, projection, selection, selectionArgs, null, null, orderBy);
// 通知监听
cursor.setNotificationUri(getContext().getContentResolver(), FirstProviderMetaData.UserTableMetaData.CONTENT_URI);
return cursor;
}
在activity 里面通过getContentResolver() 就可以得到一个 包含provider 调用的对象,然后调用provider中对应的方法 像什么insert,query等等