创建内容提供者
1.首先创建一个类继承contentProvider,该类中需要实现一些方法
public class MyContentProvider extends ContentProvider {
@Override
public boolean onCreate() {
// TODO 自动生成的方法存根
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
// TODO 自动生成的方法存根
return null;
}
@Override
public String getType(Uri uri) {
// TODO 自动生成的方法存根
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO 自动生成的方法存根
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO 自动生成的方法存根
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
// TODO 自动生成的方法存根
return 0;
}
}
然后别忘了,contentProvider作为四大组件之一需要在Manifest文件中注册,在注册时除了需要注明名称外还需要添加一个anthorities属性用于标识:
<provider android:name="com.example.contentProviderTest.MyContentProvider"
android:authorities="Thisisauthorities">
</provider>
2.要使用contentProvider需要通过UriMatcher类的对象。由上面的代码可以得知,内容提供者里的方法多数需要传递一个uri作为参数作为标识。不同的uri分别对应不同的行为。而这些uri是通过UriMatcher提前注册的。一般在使用时,先在类中加载一个静态代码块(会随着类的加载而加载)。使用UriMatcher的addUri方法进行添加。
//在MyContentProvider类里加上
private static final UriMatcher mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码
static {
mUriMatcher.addURI("Thisisauthorities", "query", 25);
//返回码一般定义为常量
}
前两个参数就是String类型的“anthorities”和“path”,这两个参数一起构成了uri。第三个参数为返回码。与addUri方法相对应,UriMatcher中的match方法在调用时会返回一个状态码,如果两个返回码相同,则匹配成功。
3.匹配成功后就可以对数据库进行相应的操作了。通过实现contentProvider的几个方法暴露需要暴露的数据。那么如何规定那些方法/数据可以被访问?答案就是通过之前静态代码块里提前写好的Uri。举个例子:实现query方法
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
// TODO 自动生成的方法存根
int matchCode = mUriMatcher.match(uri);
if(matchCode == QUERYSUCCESS) {
SQLiteDatabase sqd = moh.getReadableDatabase();
Cursor cursor = sqd.query("mydatabase", projection, selection, selectionArgs, null, null, sortOrder);
return cursor;
}
return null;
}
**************************************************接下来就该访问数据了*************************************************
使用内容解析者访问数据
4.在另一个应用程序中直接通过上下文中的getContentResolver()方法得到ContentResolver。
5.通过ContentResolver对象的“增删改查”方法对数据库进行操作。事实上调用的是contentProvider的增删改查方法。
(6).现在可以对你的数据为所欲为了。
欢迎关注订阅,查看更多分享