android.database.Cursor registerContentObserver

man*_*uai 2 sqlite android

这里是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");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我更改数据库(删除/更新/添加行)时,将永远不会调用ContentObserver的onChange方法.所以我想知道什么情况会触发ContentObserver?

Hep*_*tus 6

基本上,这是一个问题的文件中,在解释这个职位 -和戴的帽子到@mikerowehl做研究!

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

因此,原始的SQLiteCursor对那些花哨的游标来说是一种"糟糕的关系" ... :)