分享

ContentProvider与ContentResolver使用

 jiffes 2019-01-31

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多