使用 Smack 从 XMPP PubSub 节点检索最后的项目总是 returns 只有一个项目
Retrieving last items from XMPP PubSub Node with Smack always returns only a single item
我正在为我的 Android 应用程序使用最新的 Smack (4.1)。
从节点检索持久性项目时,是否仅为每个用户 return 最新发布的项目?现在,当我尝试调用 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>
这是我在调试中收到的唯一信息。除了针对该特定用户和其他用户的最新发布的项目外,没有其他项目。
很明显,我正在接收存储在节点中的项目,但是服务器仅为每个用户 returns 最新发布的项目。我想检索发布到该节点的所有项目,无论它是否是该用户的最新项目。
这是服务器设置问题吗?
我感谢任何意见或建议。
谢谢!
这可能是服务器限制。 XEP-60 6.5.7 使 max_items
成为可选功能。
我正在将负载项的 JID 设置为用户的 JID。结果,我覆盖了以前的 ID,用户以前提交的内容也被覆盖了。我将PayLoadItem的ItemID设置为null,让服务器每次生成一个唯一的ID,所以之前的项目不会被覆盖。
我正在为我的 Android 应用程序使用最新的 Smack (4.1)。
从节点检索持久性项目时,是否仅为每个用户 return 最新发布的项目?现在,当我尝试调用 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>
这是我在调试中收到的唯一信息。除了针对该特定用户和其他用户的最新发布的项目外,没有其他项目。
很明显,我正在接收存储在节点中的项目,但是服务器仅为每个用户 returns 最新发布的项目。我想检索发布到该节点的所有项目,无论它是否是该用户的最新项目。
这是服务器设置问题吗? 我感谢任何意见或建议。 谢谢!
这可能是服务器限制。 XEP-60 6.5.7 使 max_items
成为可选功能。
我正在将负载项的 JID 设置为用户的 JID。结果,我覆盖了以前的 ID,用户以前提交的内容也被覆盖了。我将PayLoadItem的ItemID设置为null,让服务器每次生成一个唯一的ID,所以之前的项目不会被覆盖。