当ContentProvider中的数据发生变化时可以向其他用户发出通知
来源:互联网 发布:始作俑者,其无后乎 编辑:程序博客网 时间:2024/04/25 21:52
如果ContentProvider的访问者需要得知ContentProvider中的数据发生了变化,可以在ContentProvider 发生数据变化时调用getContentResolver().notifyChange(uri,null)来通知注册在此URI上的访问者,例子如下:
public class PersonContentProvider extends ContentProvider {
public Uri insert(Uri uri, ContentValues values) {
db.insert("person", "id", values);
getContext().getContentResolver().notifyChange(uri, null);
}
}
如果ContentProvider的访问者需要得到数据变化通知,必须使用ContentObserver对数据(数据采用uri描述)进行监听,当监听到数据变化通知时,系统就会调用ContentObserver的onChange()方法:
注册订阅了该uri的访问者:
getContentResolver().registerContentObserver(Uri.parse("content://com.yfit.person.personContentProvider/person"),
true, new PersonObserver(new Handler()));
public class PersonObserver extends ContentObserver{
public PersonObserver(Handler handler) {
super(handler);
}
//当数据发生改变的时候,就会调用该方法!
public void onChange(boolean selfChange) {
Uri uri = Uri.parse("content://com.yfit.person.personContentProvider/person");
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
float weight = cursor.getFloat(cursor.getColumnIndex("weight"));
Log.i(Tag, "name=" + name + ", age=" + age + ", weight=" + weight);
String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
float weight = cursor.getFloat(cursor.getColumnIndex("weight"));
Log.i(Tag, "name=" + name + ", age=" + age + ", weight=" + weight);
}
}
}
}
注意点:一、数据发生变化时候也必须通过ContentResolver类来操作数据的变化,否则检测不到数据的变化,
二、利用AndroidTestCase测试类来调试也检测不到数据的变化,纯属个人试验结果,如果高人能用其他的方法,请指教。
- 当ContentProvider中的数据发生变化时可以向其他用户发出通知
- 我的android 第26天 - 当ContentProvider中数据发生变化时向其用户发出通知
- sqlDependency提供了这样一种能力:当被监测的数据库中的数据发生变化时,SqlDependency会自动触发OnChange事件来通知应用程序,从而达到让系统自动更新数据(或缓存)的目的.
- ANDROID-当网络发生变化时使用BroadcastReceiver和service通知
- 使用迭代器遍历集合时,当集合中的数据发生变化是会抛出java.util.ConcurrentModificationException异常
- mysql表数据发生变化时,主动通知业务系统(mysql-udf-http)
- 当表结构发生变化时,如何同步到ADF-BC中的EO?
- 当表结构发生变化时,如何同步到ADF-BC中的EO?
- 怎样设计一个模块A 当这个模块状态发生变化时,使其它模块可以得知?
- ContentProvider 监听数据变化
- ContentProvider监听数据变化
- 怎么对ContentProvider中的数据变化进行监控
- 4.3使用ContentObserver监听ContentProvider中的数据变化
- LocationListener监听位置变化,当进入到某一距离内时发出提醒
- 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。 虽然使用其他方法也可以对外共享数
- 保存时检测窗体上控件中的数据是否发生变化 asp
- 当TextView或者EditView的内容发生变化时,其他组件及时给予响应时,我们可以使用TextWatcher来实现。
- ContentObserver监听ContentProvider数据变化
- SOSO平台部产品总监聊产品经理这一行
- 面向对象之父Alan Kay:预测未来,创造未来
- 主流计算机编程语言之父---集锦
- Oracle基础
- 【web】FireBug调试技巧
- 当ContentProvider中的数据发生变化时可以向其他用户发出通知
- 计算机语言发展史
- 计算机语言分类
- HDOJ1013 Digital Roots
- 提供高性能 揭秘Facebook的系统架构
- 读三国志有感之二·好学知礼的倔老头儿
- Unix 40年:昨天,今天和明天
- ARM设计思想与高效C编程
- 面向对象的发展过程