【发布时间】:2015-07-12 09:10:28
【问题描述】:
我正在为我的 Android 应用程序使用最新的 Smack (4.1)。
从节点检索持久性项目时,它是否只返回每个用户最新发布的项目?现在,当我尝试调用 getItems 时,我似乎只能从每个用户那里获得最新发布的事件。我想从节点中检索 所有 项,即使每个用户有多个项目。
这是我目前用于检索的代码:
PubSubManager manager = new PubSubManager(connectionManager.getConnection());
node = manager.getNode(nodeList);
Collection<PayloadItem<EventItem>> eventItems = node.getItems(25);
Log.e(TAG, "Collection size: " + eventItems.size());
List<PayloadItem<EventItem>> payloadList = new ArrayList<>();
for(PayloadItem<EventItem> payload : eventItems) {
eventItemList.add(payload.getPayload());
}
这是我的节点配置表单:
ConfigureForm configureForm = new ConfigureForm(DataForm.Type.submit);
configureForm.setAccessModel(AccessModel.open);
configureForm.setDeliverPayloads(true);
configureForm.setNotifyRetract(true);
configureForm.setPersistentItems(true);
configureForm.setPublishModel(PublishModel.open);
如您所知,setPersistentItems 是真的。如果一个用户将两个项目提交到一个节点,然后调用 getItems,则只会收到他们最新发布的项目。调试显示我只收到以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<iq to="pubsub.example.com" id="4cw4Z-27" type="get">
<pubsub xmlns="http://jabber.org/protocol/pubsub">
<items node="TESTNODE" max_items="25" />
</pubsub>
</iq>
<?xml version="1.0" encoding="UTF-8"?>
<iq from="pubsub.example.com" to="afa@example.com/Smack" id="4cw4Z-27" type="result">
<pubsub xmlns="http://jabber.org/protocol/pubsub">
<items node="TESTNODE">
<item id="bool@example.com/Smack">
<newevent xmlns="http://jabber.org/protocol/newevent" xml:lang="en">
<sender>bool@example.com</sender>
<title>Test Title 2</title>
<description>Test description</description>
</newevent>
</item>
</items>
</pubsub>
</iq>
这是我在调试中收到的唯一内容。除了该特定用户和其他用户的最新发布的项目外,不存在其他项目。
很明显,我正在接收存储在节点中的项目,但是服务器只返回每个用户最新发布的项目。我想检索发布到节点的所有项目,无论它是否是该用户的最新项目。
这是服务器设置问题吗? 我感谢任何意见或建议。 谢谢!
【问题讨论】:
标签: java xmpp publish-subscribe smack