ContentProvider与ContentResolver使用
程序员文章站
2024-02-09 16:49:46
...
1.什么是ContentProvider
ContentResolver是数据调用者,ContentProvider将数据发布出来后通过ContentResolver对象结合Uri进行调用。
通过ContentResolver可以调用ContentProvider的增、删、改、查操作。
2.什么是Uri?
上面使用ContentResolver需要结合Uri进行调用,那么什么是Uri:
通用资源标识符简称URI;
Uri代表操作数据的地址,每个ContentProvider发布数据都有一个唯一的地址;
Uri格式:content://com.android.app/contacts
3.创建自定义ContentProvide的步骤
1.使用SQLine,创建数据库和数据表;
2.新建类继承ContentProvider;
3.创建UriMatcher定义Uri的规则;
4.重写ContentProvider的6个方法;
5.在Manifest中注册Provider;
6.ContentResolver对ContentProvider共享数据进行操作;
4.自定义ContentProvider简易例子:
首先在一个项目中完成好数据库表的创建;
新建一个类继承ContentProvider;
并重写ContentProvider的6个方法;
在方法中实现数据库 增、删、改、查的操作;
public class Myprovider extends ContentProvider {
@Override
//重写onCreate方法
public boolean onCreate() {
dbHelpter = new DBHelpter(getContext(), "demodb", null, 1);
Log.e("0000000000","onCreate");
return false;
}
@Nullable
@Override
//重写query方法、实现查询操作。
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
SQLiteDatabase db=dbHelpter.getWritableDatabase();
Cursor cursor=null;
cursor=db.query("student",projection,selection,selectionArgs,null,null,sortOrder);
}
Log.e("0000000000000000000","query");
return cursor;
}
@Nullable
@Override
//重写getType方法
public String getType(@NonNull Uri uri) {
Log.e("0000000000000000000","getType");
return null;
}
@Nullable
@Override
//重写insert方法 实现增加操作。
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
SQLiteDatabase db=dbHelpter.getWritableDatabase();
db.insert("student", null, values);
Log.e("0000000000000000000","insert");
return null;
}
@Override
//重写delete方法 实现删除操作
public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
SQLiteDatabase db=dbHelpter.getWritableDatabase();
db.delete("student",selection,selectionArgs);
Log.e("0000000000000000000","delete");
return 0;
}
@Override
//重写update方法 实现更新操作
public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
SQLiteDatabase db=dbHelpter.getWritableDatabase();
int num=0;
num= db.update("student",values,selection,selectionArgs);
Log.e("0000000000000000000","update");
return num;
}
}
在Manifest中注册Provider;
其中 "com.example.myapplication.provider“做为Uri的存放地址。
<provider
android:exported="true"
android:enabled="true"
android:authorities="com.example.myapplication.provider"
android:name=".entity.Myprovider">
</provider>
在另外一个Project中创建新的Activity作为接受方通过resolver传递参数来实现增、删、改、查的方法。
public class ProviderActivity extends AppCompatActivity implements View.OnClickListener {
private Button button;
private Button button2;
private Button button3;
private Button button4;
private EditText editText;
private EditText editText2;
private Uri uri;
private ContentResolver resolver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_provider);
button = findViewById(R.id.btn_provider);
button2 = findViewById(R.id.btn_provider2);
button3 = findViewById(R.id.btn_provider3);
button4 = findViewById(R.id.btn_provider4);
editText=findViewById(R.id.edittext);
editText2=findViewById(R.id.edittext2);
uri = Uri.parse("content://com.example.myapplication.provider");
resolver = getContentResolver();
button.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
button4.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_provider2:
//增
ContentValues values = new ContentValues();
values.put("Name", ""+editText.getText().toString());
resolver.insert(uri, values);
break;
case R.id.btn_provider:
// 删
resolver.delete(uri, "Name=?", new String[]{editText2.getText().toString()});
break;
case R.id.btn_provider3:
//查
Cursor cursor=getContentResolver().query(uri,null,null,null,null);
while (cursor.moveToNext()){
String s=cursor.getString(cursor.getColumnIndex("Name"));
Log.e("000000000000",""+s);
}
cursor.close();
break;
case R.id.btn_provider4:
//改
ContentValues contentValues = new ContentValues();
contentValues.put("Name", editText.getText().toString());
resolver.update(uri,contentValues,"Name=?", new String[]{editText2.getText().toString()});
break;
}
}
上一篇: ContentProvider&ContentResolver
下一篇: Android ContentProvider、ContentResolver/ContentObserver 修改监听流程
推荐阅读
-
ContentProvider&ContentResolver
-
Android ContentProvider、ContentResolver/ContentObserver 修改监听流程
-
ContentProvider&ContentResolver
-
ContentProvider与ContentResolver使用
-
ContentResolver,ContentProvider,ContentObserver使用记录
-
ContentResolver和ContentProvider
-
微信小程序template模板与component组件的区别和使用详解
-
php下intval()和(int)整数转换的使用与区别
-
JavaScript JMap类定义与使用方法示例
-
使用navicat 8实现创建数据库和导入数据 管理用户与权限[图文方