0

我的活动中有以下代码:

Cursor mCursor = managedQuery(ActivityColumns.CONTENT_URI, PROJECTION, null, null,
                getSortOrderStringFromSpinner());

        mCursor.registerContentObserver(new ContentObserver(new Handler())
        {
            @Override
            public void onChange(boolean selfChange)
            {
                ...snip...// breakpoint is set here                 
            }

            @Override
            public boolean deliverSelfNotifications()
            {
                return true;
            }
        });

...在我用来获取数据的 DataProvider 中,我将查询方法中的通知 URI 设置为我要查询的类型的 uri:

c.setNotificationUri(getContext().getContentResolver(), uri);

最后,在更新、插入和删除中,如果操作成功,则通知订阅者:

getContext().getContentResolver().notifyChange(notificationUri, null);

上面一行中的 notificationUri 是正在插入/更新或删除的项目的 URI。

在“...snip...”代码行设置断点后,我添加、删除和更新了一些记录。我只会收到有关删除的通知,而不是更新或插入的通知。我究竟做错了什么?

4

3 回答 3

1

问题就像我怀疑的那样:内容观察者没有收到有关插入或更新的更新,因为当时应该刷新列表的活动已暂停。要在我的应用程序中插入或更新记录,用户启动不同的活动,他们在其中编辑记录,然后单击“提交”。

然后保存在

protected void onActivityResult (int requestCode, int resultCode, Intent data) 

我不知道的是,当我阅读文档时发现 onActivityResult 是:

当您启动的活动退出时调用,为您提供启动它的 requestCode、它返回的 resultCode 以及来自它的任何其他数据。如果活动显式返回、未返回任何结果或在操作期间崩溃,则 resultCode 将为 RESULT_CANCELED。

当您的活动重新开始时,您将在 onResume() 之前立即收到此调用。

所以底线是,当我执行插入和更新时,活动没有激活,因此它没有收到有关插入或更新的通知。

删除是不同的,因为当从上下文菜单中选择“删除”时,我的应用程序会从列表中删除项目。该活动始终保持活动状态。

于 2011-07-28T02:08:08.343 回答
0

这仍然需要更多的测试,但似乎问题在于,当光标更新发生时,没有收到通知的内容观察者的活动被暂停。并且暂停的活动不会收到事件......我认为......

于 2011-04-29T18:13:23.653 回答
0

通话

getContext().getContentResolver().notifyChange(notificationUri, null);

应该包含对被通知的内容观察者的引用,即

getContext().getContentResolver().notifyChange(notificationUri, MyContentObserver);
于 2013-11-08T13:48:18.397 回答