当ContentProvider中的数据发生变化时可以向其他用户发出通知
2012-02-17 23:31
274 查看
如果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);
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);
}
}
}
注意点:一、数据发生变化时候也必须通过ContentResolver类来操作数据的变化,否则检测不到数据的变化,
二、利用AndroidTestCase测试类来调试也检测不到数据的变化,纯属个人试验结果,如果高人能用其他的方法,请指教。
相关文章推荐
- 我的android 第26天 - 当ContentProvider中数据发生变化时向其用户发出通知
- 逻辑回归(Logistic Regression, LR)又称为逻辑回归分析,是分类和预测算法中的一种。通过历史数据的表现对未来结果发生的概率进行预测。例如,我们可以将购买的概率设置为因变量,将用户的
- echarts-环形图处理图列中的点击,使百分比的数据列不发生变化,默认追加其他选项
- 元数据在列表中的显示值只有网站集管理才可以看到,其他用户无法看到值,但是添加和修改的时候所有用户都可以看到。
- mysql表数据发生变化时,主动通知业务系统(mysql-udf-http)
- 当TextView或者EditView的内容发生变化时,其他组件及时给予响应时,我们可以使用TextWatcher来实现。
- sqlDependency提供了这样一种能力:当被监测的数据库中的数据发生变化时,SqlDependency会自动触发OnChange事件来通知应用程序,从而达到让系统自动更新数据(或缓存)的目的.
- linkedin databus介绍——监听数据库变化,有新数据到来时通知其他消费者app,新数据存在内存里,多份快照
- 为什么普通用户可以看到其他用户创建dblink的密码?
- Android开发入门之监听ContentProvider中数据的变化
- android学习:使用它ContentProvider获取其他程序共享的数据
- 使用事务与锁,实现一个用户取过的数据不被其他用户取到
- Android开发14——监听内容提供者ContentProvider的数据变化
- 空间数据范围发生变化后如何更新数据的显示范围
- oracle数据记录被其他用户锁定
- 实例教程十:监听ContentProvider中数据的变化
- 由于职位发生了变化,好久没有碰javaSwing 的东东了,整理一下网络上的autoUpdate,分享一下,随后再用delphi设计一个完全可以脱离jak远行的。
- 配置iis支持.json格式的文件,如果是其他设备可以直接获取json里的数据
- 3.3内容提供者ContentProvider,供其他软件访问本软件的数据操作
- 取过的数据时不被其他用户取到的实现(数据并发处理)