android.database.Cursor registerContentObserver

时间:2012-04-05 07:58:46

标签: android sqlite

这里是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?

1 个答案:

答案 0 :(得分:6)

基本上,这是文档中的一个问题,正如this post中所解释的那样 - 并且对@mikerowehl做了研究的讨论!

归结为编写的文档主要是为了描述与ContentProviders / ContentResolvers一起使用的游标的行为。如果不涉及这些类,并且不按@Renard的建议操作,则ContentObserver将不会获得回调。尽管文档说的是什么。

因此,原始的SQLiteCursor与那些花式游标之间存在“不良关系......”)

相关问题