四大组件之内容提供者——ContentProvider

四大组件之内容提供者——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主要用于系统间程序·的相互访问。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值