打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ContentProvider与ContentResolver使用

1.什么是ContentProvider

ContentResolver是数据调用者,ContentProvider将数据发布出来后通过ContentResolver对象结合Uri进行调用。通过ContentResolver可以调用ContentProvider的增、删、改、查操作。
  • 1
  • 2

2.什么是Uri?

上面使用ContentResolver需要结合Uri进行调用,那么什么是Uri:通用资源标识符简称URI;Uri代表操作数据的地址,每个ContentProvider发布数据都有一个唯一的地址;Uri格式:content://com.android.app/contacts
  • 1
  • 2
  • 3
  • 4

3.创建自定义ContentProvide的步骤

1.使用SQLine,创建数据库和数据表;2.新建类继承ContentProvider;3.创建UriMatcher定义Uri的规则;4.重写ContentProvider的6个方法;5.在Manifest中注册Provider;6.ContentResolver对ContentProvider共享数据进行操作;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4.自定义ContentProvider简易例子:

首先在一个项目中完成好数据库表的创建;新建一个类继承ContentProvider;并重写ContentProvider的6个方法;在方法中实现数据库 增、删、改、查的操作;
  • 1
  • 2
  • 3
  • 4
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;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
在Manifest中注册Provider;其中 "com.example.myapplication.provider“做为Uri的存放地址。
  • 1
  • 2
<provider            android:exported="true"            android:enabled="true"            android:authorities="com.example.myapplication.provider"            android:name=".entity.Myprovider">        </provider>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
在另外一个Project中创建新的Activity作为接受方通过resolver传递参数来实现增、删、改、查的方法。
  • 1
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;        }    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Content Provider
ContentProvider实例详解
ContentResolver
[Android]Android数据的四种存储方式 - Ron Ngai - 博客园
Android多媒体分析(二)MediaStore
总结篇之六:ContentProvider之读写联系人
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服