ContentProvider

ContentProvider是什么

1.ContentProvider是Android四大组件之一 
2.ContentProvider是一种数据包装器,它提供统一的接口对数据进行操作,调用者不用关心数据到底是如何存储的 

3.ContentProvider主要用于不同的应用程序间,不同进程间的数据共享

ContentResolver是什么

1.vContentResolver是数据调用者,ContentResolver数据发布出来后,通过ContentResolver对象结合Uri进行调用 

2.通过ContentResolver可以调用ContentProvider的增删改查操作

URI是什么,标准格式是什么

URI

1.通用资源标识符简称Uri 
2.Uri代表操作数据的地址,每个ContentProvider发布数据时都有一个唯一的地址

标准格式

content://com.android.contacts/contacts 
content://:此部分是固定写法,用来表明这是一个Uri 
com.android.contacts:此部分指定了要访问的资源的存放地址 

contacts:此部分指定了要访问资源的路径

UriMatcher是什么

1.用于匹配Uri的Uri规则工具类 

2.当调用者传递过来Uri时,我们需要对Uri进行解析,确定调用者需要执行哪个操作

如何使用ContentProvider

创建一个ContentTest类继承ContentProvider

在oncreate方法中获取数据库对象

    public boolean onCreate() {
        Log.e(TAG, "onCreate: ");
        studentSql = new StudentSql(getContext(), "Student.db", null, 1);
        db = studentSql.getWritableDatabase();
        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        uriMatcher.addURI("content://com.example.ContentTest", "student", 1);
        uriMatcher.addURI("content://com.example.ContentTest", "aaaaaaa", 2);
        return false;
    }
创建UriMatcher
private UriMatcher uriMatcher;

 {
        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        uriMatcher.addURI("content://com.example.practiceapplication.sqlite.StudentProvider", "stu", 1);
        uriMatcher.addURI("content://com.example.practiceapplication.sqlite.StudentProvider", "tea", 1);
    }

添加增删改查

 public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
        Log.e(TAG, "query: ");
        Cursor cursor = null;
        switch (uriMatcher.match(uri)) {
            case 1:
                cursor = db.query("student", null, null, null, null, null, null);
                break;
            case 2:
                break;
            default:
                break;
        }
        return cursor;
    }



public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
        Log.e(TAG, "insert: ");
        switch (uriMatcher.match(uri)) {
            case 1:
                db.insert("student", null, values);
                break;
            case 2:
                break;
            default:
                break;
        }
        return null;
    }



public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
        Log.e(TAG, "delete: ");
        switch (uriMatcher.match(uri)) {
            case 1:
                db.delete("student", selection, selectionArgs);
                break;
            case 2:
                break;
            default:
                break;
        }
        return 0;
    }



public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
        Log.e(TAG, "update: ");
        switch (uriMatcher.match(uri)) {
            case 1:
                db.update("student", values, selection, selectionArgs);
                break;
            case 2:
                break;
            default:
                break;
        }
        return 0;
    }
使用ContentResolver对ContentProvider中的数据进行增删改查
public void onClick(View view) {
        switch (view.getId()) {
            case R.id.search_button:
                sqLiteStuList.clear();

                Cursor cursor=contentResolver.query(uri,new String[]{"id","name","age"},null,null,null);

                cursor.moveToFirst();

                    do {
                        int id = cursor.getInt(cursor.getColumnIndex("id"));
                        String name = cursor.getString(cursor.getColumnIndex("name"));
                        String age = cursor.getString(cursor.getColumnIndex("age"));

                        SQLiteStu sqLiteStu = new SQLiteStu(id, name, age);
                        sqLiteStuList.add(sqLiteStu);
                        adapter = new SQLiteAdapter(this, sqLiteStuList);

                        stu_lv.setAdapter(adapter);

                    } while (cursor.moveToNext());


                break;
            case R.id.add_button:
                String age1= stuAge_et.getText().toString();
                String name1=stuName_et.getText().toString();

                ContentValues values=new ContentValues();
                values.put("name",name1);
                values.put("age",age1);

                contentResolver.insert(uri,values);
                break;
            case R.id.delete_button:
                String name2=stuName_et.getText().toString();
                String age2= stuAge_et.getText().toString();

                contentResolver.delete(uri,"name=? and age=?",new String[]{name2,age2});
                break;
            case R.id.update_button:
                String age3= stuAge_et.getText().toString();
                String name3=stuName_et.getText().toString();

                ContentValues contentValues=new ContentValues();
                contentValues.put("name","鹏鹏");
                contentValues.put("age","20");

                contentResolver.update(uri,contentValues,"name=? and age=?",new String[]{name3,age3});
                break;
            default:
                break;
        }
    }
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值