四大组件之内容提供者——ContentProvider
ContentProvider要结合数据库进行使用,ContentProvider就是在其他的项目中获取数据库中的内容,并且对其进行操作(增、删、改、查)。
对ContentProvider进行操作需要借助uriMatcher(匹配器)。
ContentProvider代码
static {
uriMatcher.addURI("wang.provider","query",0);
uriMatcher.addURI("wang.provider","insert",1);
uriMatcher.addURI("wang.provider","delete",2);
uriMatcher.addURI("wang.provider","update",3);
}
@Override
public boolean onCreate() {
mySql = new MySql(getContext());
database = mySql.getWritableDatabase();
return false;
}
@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[]selectionArgs, @Nullable String sortOrder) {
if (uriMatcher.match(uri) == 0){
Cursor cursor = database.query("user1",projection,selection,selectionArgs,null,null,sortOrder);
return cursor;
}else{
return null;
}
}
@Nullable
@Override
public String getType(@NonNull Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValuesvalues) {
if(uriMatcher.match(uri) == 1){
Long code = database.insert("user1",null,values);
Uri uri1 = Uri.parse("wang.provider/insert"+code);
return uri1;
}else{
return null;
}
}
@Override
public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
if(uriMatcher.match(uri) == 2){
/**
* 返回值被影响的行数
* */
int code= database.delete("user1",selection,selectionArgs);
return code;
}else{
return -1;
}
}
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues values, @NullableString selection, @NullableString[] selectionArgs) {
if(uriMatcher.match(uri) == 3){
/**
* 返回值被影响的行数
* */
int code= database.update("user1",values,selection,selectionArgs);
return code;
}else{
return -1;
}
}
其他程序中调用的代码:
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) public void query_(View view){ Uri uri = Uri.parse("content://wang.provider/query"); Cursor cursor = resolver.query(uri,null,null,null,null,null); if(cursor != null){ while(cursor.moveToNext()){ String name = cursor.getString(1); String age = cursor.getString(2); Log.e("MainActivity", name + "我是其他程序来调用你的!" + age); } } } public void insert_(View view){ Uri uri = Uri.parse("content://wang.provider/insert"); ContentValues values = new ContentValues(); values.put("name","haha"); values.put("age",20); resolver.insert(uri,values); } public void delete_(View view){ Uri uri = Uri.parse("content://wang.provider/delete"); resolver.delete(uri,"name = ?",new String[]{"coco"}); } public void update_(View view){ Uri uri = Uri.parse("content://wang.provider/update"); ContentValues values = new ContentValues(); values.put("name","xixi"); resolver.update(uri,values,"name = ?",new String[]{"haha"}); }
ContentProvider主要用于系统间程序·的相互访问。