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;
}
}
}