2

这里是 registerContentObserver 的描述:

abstract void registerContentObserver(ContentObserver 观察者)

注册一个观察者,当支持此游标的内容发生更改时调用该观察者。

这是我的代码:

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 ?

4

1 回答 1

6

基本上,这是文档中的一个问题,正如这篇文章中所解释的那样——感谢@mikerowehl 进行研究!

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

因此,原始 SQLiteCursor 与那些花哨的游标有点“不良关系” ...... :)

于 2012-04-18T09:17:11.327 回答