内容提供者是Android四大组件之一
内容提供者的作用是跨APP操作、访问数据库
1.自定义类继承自 ContentProvider
实现ContentProvider要重写6个方法
public class MyContentProvider extends ContentProvider {
MyOpenHelper myOpenHelper;
SQLiteDatabase database;
@Override
public boolean onCreate() {
//new 数据库
myOpenHelper = new MyOpenHelper(getContext());
//获取读写权限
database = myOpenHelper.getWritableDatabase();
if (database != null){
return true;
}
return false;
}
@Nullable
@Override//对表进行查询操作
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
return
database.query("student"
,projection
,selection
,selectionArgs
,null
,null
,sortOrder);
}
@Nullable
@Override//
public String getType(@NonNull Uri uri) {
return null;
}
@Nullable
@Override//对表进行添加操作
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
database.insert("student",null,values);
return uri;
}
@Override//对表进行删除操作
public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
return database.delete("student",selection,selectionArgs);
}
@Override//对表进行修改操作
public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
return database.update("student",values,selection,selectionArgs);
}
}
2.要在清单文件进行注册
<provider
android:name=".MyContentProvider"
android:authorities="com.bw.student"
android:exported="true"
android:readPermission="com.bw.student.READ"
android:writePermission="com.bw.student.WRITE"/>
进行权限设置
<permission android:name="com.bw.student.READ"/>
<permission android:name="com.bw.student.WRITE"/>
3.索取方的操作
首先要添加权限
<uses-permission android:name="com.bw.student.READ"/>
<uses-permission android:name="com.bw.student.WRITE"/>
ContentResolver resolver = getContentResolver()//获取内容提供者
Uri uri = Uri.parse("content://com.bw.student");//转换别名
剩下的就是内容提供者打点调用增删改查的方法了
//添加操作
public void insertUser(){
ContentValues values = new ContentValues();
values.put("uname","张三");
values.put("age",19);
resolver.insert(uri,values);
}
//修改操作
public void updateUser(){
ContentValues values = new ContentValues();
values.put("age",11);
resolver.update(uri,values,"uname = ?",new String[]{"张三"});
}
//删除操作
public void deleteUser(){
resolver.delete(uri,"uid = ?",new String[]{"1"});
}
//查询操作
public void queryUser(){
Cursor query = resolver.query(uri, null, null, null, null, null);
while (query.moveToNext()){
String uname = query.getString(query.getColumnIndex("uname"));
int age = query.getInt(query.getColumnIndex("age"));
Log.i("---",uname+"###"+age);
}
}