四大組件之內容提供者——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 Cursorquery(@NonNullUri 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 StringgetType(@NonNullUri uri) {
   
return null;
}

@Nullable
@Override
public Uri insert(@NonNullUri 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(@NonNullUri 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(@NonNullUri 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主要用於系統間程序·的相互訪問。

 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com