功能说明
1、contentprovider是安卓四大组件之一,使用其方法类进行数据获取;
2、自建一个provider,然后在另一个app中使用resolver调用这个provider。
一、Mycontent
MyContentProvider
我们先创建一个项目叫Mycontent,在该项目中我们自定义一个MyContentProvider的类用来共享该应用的数据,自定义MyContentProvider的代码如下:
这里的authorities唯一标识该内容提供者,这样其它的应用才可以找到该内容提供者并操作它的数据;ContentProvider通过uri来标识其它应用要访问的数据;
MyDAO
public class MyDAO {
Context context ;
private static final String AUTHORITY="zkh.provider2";
MyDBhelper dBhelper;
SQLiteDatabase database;
public MyDAO(Context context) {
this.context=context;
dBhelper=new MyDBhelper(context,"zkhDB",null,1);
database=dBhelper.getWritableDatabase();
}
public Uri zkhInsert(ContentValues values1){
Uri uri=Uri.parse("content://"+AUTHORITY+"/student");
Uri inserturi=null;
long rowId=database.insert("student",null,values1);
inserturi= ContentUris.withAppendedId(uri,rowId);//做uri的资源管理
context.getContentResolver().notifyChange(inserturi,null);
return inserturi;
}
}
MyDBhelper
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 db) {
db.execSQL("create table student(id integer primary key autoincrement,name vachar(10),age integer)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
二、myreceiver
通过ContentResolver来访问ContentProvider提供的数据,而ContentResolver通过uri来定位自己要访问的数据
public class MainActivity extends AppCompatActivity {
private static final String AUTHORITY="zkh.provider2";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=findViewById(R.id.button);
ContentResolver resolver=getContentResolver();
Uri uri=Uri.parse("content://"+AUTHORITY+"/student");//student是所用的表的名字
ContentValues values=new ContentValues();
values.put("name","zkh");
values.put("age",42);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
resolver.insert(uri,values);
}
});
}
}
三、实验结果
运行mycontent,观察到表中有5条数据
运行myreceiver,点击按钮后,刷新表,表中数据增加一行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-40kyqC40-1669308279105)(https:添加链接描述]//img-blog.csdnimg.cn/aa4c3a8a22f646d99134b43271b8bd2e.png)