欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ContentProvider和ContentResolver的使用方法

程序员文章站 2024-02-09 16:59:04
...

什么是ContentProvider:
1.ContentProvider是Android四大组件之一。
2.ContentProvider是一种数据包装器(发布者),他提供统一的接口对数据进行操作,调用者不用关心数据到底如何存储。
3.ContentProvider主要用于不同应用之间,不同程序之间的数据交流。
什么是ContentResolver:
1.ContentResolver是数据调用者,ContentProvider将数据发布出来之后通过ContentResolver对象结合URI进行调用。
2.通过ContentResolver可以调用ContentProvider的增删改查操作。
对于使用ContentProvider和ContentResolver一定会使用uri 对于URI就是通用资源标识符,简称uri
URI代表要操作数据的地址,每一个ContentProvide发布数据时都是一个唯一的地址
关于自定义ContentProvide的步骤:
1.使用SQlite技术,创建好数据库和数据表,
2.新建继承类ContentProvider
3.新建继承类UriMatcher定义uri;
4.重写6个抽象方法
5.在AndroidManifest中注册provider
6.ContentResolver对ContentProvider共享的数据进行增删改查。
后面我们通过代码来看看
对于这么多段代码我们只要系统自带的就可以不要害怕至于之前的数据库的创建我就不用代码展示了因为 在我们前面的代码中有展示你只要自己去看看就可以。

public class StudentProvide extends ContentProvider {
    private String TAG = "StudentProvide";
    @Override
    public boolean onCreate() {
        Log.e(TAG,"onCreate=============================");
        return false;
    }

    @Nullable
    @Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] strings, @Nullable String s, @Nullable String[] strings1, @Nullable String s1) {

        Log.e(TAG,"query=============================");
        return null;
    }

    @Nullable
    @Override
    public String getType(@NonNull Uri uri) {
        Log.e(TAG,"getType=============================");
        return null;
    }

    @Nullable
    @Override
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) {
        DBHelper dbHelper = new DBHelper(getContext(), "student1", null, 1);
        SQLiteDatabase database = dbHelper.getWritableDatabase();
        database.insert("student", null, contentValues);

        return null;
    }

    @Override
    public int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) {

        DBHelper dbHelper = new DBHelper(getContext(),"student1",null,1);
        SQLiteDatabase database = dbHelper.getWritableDatabase();
        database.delete("student",s,strings);

          Log.e(TAG,"delete=============================");
        return 0;
    }

    @Override
    public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) {
        Log.e(TAG,"update=============================");
        return 0;
    }
}

对于我们要一样的id因为不同的id就不会传值起到作用,这也是我们需要注意的对于之后的ContentResolver的代码就是下面的部分

  public void onClick(View view) {
        switch (view.getId()) {
            case R.id.tiaoshi_btn:

                String name = text.getText().toString();

                Uri uri = Uri.parse("content://com.example.zhan.mt.provider");
                ContentResolver resolver = getContentResolver();
                ContentValues contentValues = new ContentValues();
                contentValues.put("name",name);
                resolver.insert(uri, contentValues);

                break;
            case  R.id.delet_btn:
                String name1 = text.getText().toString();

                Uri uri1 = Uri.parse("content://com.example.zhan.mt.provider");
                ContentResolver resolver1 = getContentResolver();
                ContentValues contentValues1 = new ContentValues();
                contentValues1.put("name",name1);
                resolver1.delete(uri1,"name=?",new String[]{name1});
                break;

就是几个点击事件然后就是在这个页面的操作传递到第一个页面的操作对于之后还有一些部分的讲解我会在后面的代码展示中展现出来。