目录
1.什么是contentprovider
ContentProvider的作用是为不同的应用之间数据共享,提供统一的接口,我们知道安卓系统中应用内部的数据是对外隔离的,要想让其它应用能使用自己的数据(例如通讯录)这个时候就用到了ContentProvider。
ContentProvider通过uri来标识其它应用要访问的数据,通过ContentResolver的增、删、改、查方法实现对共享数据的操作。还可以通过注册ContentObserver来监听数据是否发生了变化来对应的刷新页面。
什么是uri?
通用资源标志符(Universal Resource Identifier, 简称"URI")
Uri代表要操作的数据,Android上可用的每种资源 (图像、视频片段、网页等) 都可以用Uri来表示。
从概念上来讲,URI包括URL
2.框架
建一个provider,然后在另一个app中使用resolver调用这个provider。
resolver
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ContentResolver resolver=getContentResolver();
Button button=findViewById(R.id.button1);
ContentValues values=new ContentValues();
values.put("name","rs");
values.put("age",22);
ContentValues values1=new ContentValues();
values1.put("name","djy");
values1.put("age",26);
Uri uri=Uri.parse("content://rs.provider/student");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
resolver.insert(uri,values);
resolver.insert(uri,values1);
}
});
}
}
注意在manifest文件中添加
<queries> <package android:name="com.example.provider"></package> </queries>
获取权限
provider
dbhelper文件,创建数据库
public class MyDBhelper extends SQLiteOpenHelper {
public MyDBhelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("create table student (id integer primary key autoincrement,name varchar,age integer)");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
mydao.java
private Context context;
private SQLiteDatabase database;
public MyDAO(Context context){
this.context=context;
MyDBhelper dBhelper=new MyDBhelper(context,"rsDB",null,1);
database=dBhelper.getWritableDatabase();
}
public Uri DAOinsert(ContentValues contentValues){
long rowid=database.insert("student",null,contentValues);
Uri uri=Uri.parse("content://rs.provider");
Uri inserturi= ContentUris.withAppendedId(uri,rowid);
context.getContentResolver().notifyChange(inserturi,null);
return inserturi;
}
}
在file->other->ContentProvider创建文件
修改代码
@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO: Implement this to handle requests to insert a new row.
//getContext().getContentResolver().insert(uri,values);
return myDAO.DAOinsert(values);
}
@Override
public boolean onCreate() {
// TODO: Implement this to initialize your content provider on startup.
Context context=getContext();
myDAO=new MyDAO(context);
return false;
}