您的位置:首页 > 编程语言 > PHP开发

监听ContentProvider中数据的变化

2013-09-02 17:07 465 查看
A应用向C应用中添加一条数据,B应用监听C应用中的数据变化

A应用中代码如下:

1、主页面中添加一个按钮,用于向C应用中添加一条数据。代码如下:

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button"
android:onClick="insert"
/>


android:onClick="insert"

按钮的onClick事件,当按钮点击时触发insert方法。

2、insert方法代码如下:

public void insert(View v){
Uri uri=Uri.parse("content://xdd.providers.Person/person");
//通过上下文对象,获得ContentResolver对象
ContentResolver resolver =this.getContentResolver();
//通过ContentValues添加数据
ContentValues values=new ContentValues();
values.put("name", "Aapptest");
values.put("phone", "123456");
values.put("amount", "99999999");
//通过ContentValues的insert方法插入数据
resolver.insert(uri, values);
}


C应用中代码如下:

1、当A应用插入数据时,C应用ContentProvider中的insert方法发出数据变化通知,代码如下:

public Uri insert(Uri uri, ContentValues values) {
//1、获得数据库操作实例
SQLiteDatabase db =dbOpenHelper.getWritableDatabase();
//3、判断传入的uri
switch (Matcher.match(uri)) {
case 1:
long rowid=db.insert("person", "name", values);
Uri insertUri=ContentUris.withAppendedId(uri, rowid);
//通过上下文对象调用getContentResolver的notifyChange(uri,监听者)方法 ;
//发出数据变化通知
this.getContext().getContentResolver().notifyChange(uri, null);
return insertUri;

default:
throw new IllegalArgumentException("this is unknown uri"+uri);
}

}
B应用中代码如下:

1、B应用在运行时就要注册一个数据变化监听器:registerContentObserver。代码如下:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Uri uri=Uri.parse("content://xdd.providers.Person/person");
//注册数据变化监听器
this.getContentResolver().registerContentObserver(uri, true, new PersonContentObserver(new Handler()));
}
2、继承ContentObserver,并实现onChange方法。代码如下:

public void onChange(boolean selfChange) {
//select * from person order by personid desc limit 1
Uri uri =Uri.parse("content://xdd.providers.Person/person");
//获取数据
Cursor cursor =getContentResolver().query(uri, null, null, null, "personid desc limit 1");
if(cursor.moveToFirst()){
String name=cursor.getString(cursor.getColumnIndex("name"));
Log.i("MainActivity", name);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: