使用 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,所以之前的项目不会被覆盖。