这里是registerContentObserver的描述:
abstract void registerContentObserver(ContentObserver observer)
注册在支持此光标的内容发生更改时调用的观察者。
这是我的代码:
Cursor cursor = (SQLiteCursor)dataBase.query(projection, null, null, null);
cursor .registerContentObserver(new ChangeObserver());
private class ChangeObserver extends ContentObserver {
public ChangeObserver() {
super(new Handler());
}
@Override
public boolean deliverSelfNotifications() {
return true;
}
@Override
public void onChange(boolean selfChange) {
Log.d(Constants.TAG, "ChangeObserver.onChange");
}
}
但是当我更改数据库(删除/更新/添加行)时,将永远不会调用ContentObserver的onChange方法。 所以我想知道什么情况会触发ContentObserver?
答案 0 :(得分:6)
基本上,这是文档中的一个问题,正如this post中所解释的那样 - 并且对@mikerowehl做了研究的讨论!
归结为编写的文档主要是为了描述与ContentProviders / ContentResolvers一起使用的游标的行为。如果不涉及这些类,并且不按@Renard的建议操作,则ContentObserver将不会获得回调。尽管文档说的是什么。
因此,原始的SQLiteCursor与那些花式游标之间存在“不良关系......”)