[英]Retrieving last items from XMPP PubSub Node with Smack always returns only a single item
我在我的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為true。 如果一個用戶向節點提交兩個項目,然后調用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>
這是我在調試中唯一收到的東西。 除了針對該特定用戶和其他用戶的最新發布項目之外,不存在其他項目。
很明顯,我收到了存儲在節點中的項目,但是服務器只返回每個用戶的最新發布項目。 我想檢索發布到節點的所有項目,無論它是否是該用戶的最新項目。
這是服務器設置問題嗎? 我感謝任何建議或意見。 謝謝!
這可能是服務器限制。 XEP-60 6.5.7使max_items
成為可選功能。
我正在將有效負載項的JID設置為用戶的JID。 結果,我覆蓋了以前的ID,並且用戶之前的提交被覆蓋了。 我將PayLoadItem的ItemID設置為null,這樣服務器每次都會生成一個唯一的ID,因此不會覆蓋之前的項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.