我设置了多个光标加载器,指向我的内容提供商中的不同URI,它们可以正常工作。每个加载器都用于我的数据库中的特定表。
但是我现在已经在我的内容提供程序中创建了一个新的URI来对我的表执行连接查询。我创建了一个新的加载器,它指向用于执行连接查询的URI,但加载器不会更新UI。
如果我关闭应用程序然后打开它,则会显示新数据,但在一个活动中插入新数据然后返回到我的主要活动后,数据尚未更新。尽管数据库已插入新数据,但仍未调用加载程序。
我正在调用cursor.setNotificationUri(getContext()。getContentResolver(),uri);我的新加入URI。
为什么这不起作用有什么特别的原因吗?就像我说的那样,加载器可以很好地用于标准查询单个表,但带有连接查询的加载器却没有。
加载程序是否只能监听正在更新的单个表,以及为什么它不能监听加入?
编辑:
有关工作流程的更多信息......
活动1使用单独表的连接查询读取数据并显示到UI 活动2将数据插入到数据库的单独表中
活动1启动活动2,插入数据后完成
活动1有一个加载器来更新UI。从单个表中读取的加载器工作正常,但是在更新数据时不会调用从连接查询读取的加载器。它仅在创建活动时调用。
答案 0 :(得分:1)
我知道这个问题是很久以前问过的,但是希望它可以帮助其他一些遇到相同问题的人...我遇到了完全相同的问题
在设置通知Uri之前,在内容提供程序类的Query方法中。确保“更新和删除Uri”与查询Uri相同。
uri = Uri.parse("content://com.casselsinthecloud.cloudbeats.provider/playlist_contents");
然后使用新的Uri调用setNotificationUri(...)。
cursor.setNotificationUri(getContext().getContentResolver(), uri);
这将确保CursorLoader动态更新。.