ContentProvider类
如果想在多个引用之间共享数据就需要使用该类,如果不需要共享应用的数据则无需使用该类。
当通过ContentResolver发出URI请求时检测ContentResolver的authority是否已在contentProvider中已注册过。ContentProvider能解析任何它满足条件的URI请求,但是需要UriMatcher类帮助进行解析。
需要实现的基础方法:
Query:需要返回哪些数据给调用者;
Insert:将新的数据添加到contentProvider中;
Delete:从contentProvider中需要删除哪些数据;
getType:返回数据在contentProvider中的MIME类型。
该类需要跨进程访问,所以子类无需考虑是哪一个进程发起的请求。
contentProvider 实现了ComponentCallbacks接口;ComponentCallbacks接口有两个方法:
void onConfigurationChanged(Configuration newConfig);
void onLowMemory();
如果想要添加新的方法到contentprovider中,则同时也需要将同样的方法添加到MockContentPr中。
1. 构造函数
Public ContentProvider(
Content c,//
String readPermission,//希望 readPermission实例能通过测试,则使用getReadPermission()获取readPermission;
String writePermiddion,// getWritePermission
PathPermission[] pathPermissions//getPathPermissions
)
2. 方法
a) Public abstract Cursor query(
Uri uri,//该uri是一个从客户端传递过来的完整的URI;如果请求的是明确的记录,那么uri的结尾会有记录编号,分析后添加到where、having中明确指定_id的值
String[] projection,//指定需要添加到cursor中的列,null则全部添加
String selection,//筛选的行要满足此条件,null则返回所有行
String[] selectionArgs,//提花selection中的”?”
String sortOrder//记录的排序
);
返回cursor或null。
b) Public abstract String getType(
Uri uri//请求的URI
);
返回uri指向的数据的mime类型,当是一条记录时返回以vnd.android.cursor.item开头,当是多条记录时返回以vnd.android.cursor.dir开头。
c) Public abstract Uri insert(
Uri uri,//从客户端传递过来的完整的URI,指定要插入的对象
ContentValues values//需要插入数据库的值,以键/值对形式保存
)
插入一条新的数据记录,返回一个新插入项的uri
d) Public int bulkInsert(
Uri uri,
ContentValues[] values
);
进行批量插入数据,返回传入的记录条数。
调用该方法进行插入新数据是遍历values重复调用insert(uri,values),插入后调用ContentResolver.notifyChange()。
e) Public int delete(
Uri uri,//完整的URI,包含了行的ID
String selection,//删除条件
String[] selectionArgs //替换selection中的”?”
);
删除一条或多条记录,删除时使用selection进行约束。返回影响的行数。
f) Public int update(
Uri uri,//请求的URI,若是更新某个具体的记录则需要含有记录的ID
ContentValues values,//新值
String selection,//更新条件
String [] selectionArgs//替换”?”
);
更新数据,返回影响的行数,更新完成后调用ContentResolver.notifyChange()。