1. 设计目标
利用contentprovider获取数据
2.实现功能
自建一个provider,然后在另一个app中使用resolver调用这个provider。
3.代码分析
首先,在AS上创建两个新项目,命名为Myreceiver和Mycontentprovider
Myreceiver项目
其布局和mainactivity代码如下:
在页面中添加了一个button按钮,为button按钮写入监听事件。
Mycontentprovider:
新建一个provider:new->other->content Provider,自动生成方法:
只需要更改oncreate方法
点击查看代码
public boolean onCreate() {
Context context=getContext();
MyDao myDao=new MyDao(context);
return true;
}
添加一个MyDBhelper的java文件,之前写过,直接复制过来,代码如下:
点击查看代码
public class MyDBhelper extends SQLiteOpenHelper {
public MyDBhelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory,
int version) {
super(context, "ZW", null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table student(id Integer primary key autoincrement," +
"name varchar(20),age Integer)");
Log.d("ZW","onCreate is running");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
再新建一个java文件MyDao.java,在这里实现数据库的增删改查功能。代码如下:
点击查看代码
public class MyDao {
private SQLiteDatabase database;
private SQLiteOpenHelper myopenhelper;
private Context context;
private Uri uri=Uri.parse("content://zw.provider");
public MyDao(Context context){
this.context=context;
myopenhelper=new MyDBhelper(context,"zw",null,1);
database=myopenhelper.getReadableDatabase();
database.execSQL("drop table if exists student");
database.execSQL("create table student(id integer primary key autoincrement"+", name varchar(20), age integer)");
}
public Uri addvalue(Uri uri, ContentValues values){
long rowID=database.insert("student",null,values);
if(rowID == -1){
Log.d("Dao","数据插入失败");
return null;
}
else {
Uri insertUri= ContentUris.withAppendedId(uri,rowID);
Log.d("zw","ContentUris:"+insertUri.toString());
context.getContentResolver().notifyChange(insertUri,null);
return insertUri;
}
}
}
点击查看代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyDao myDao=new MyDao(this);
}