Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Smack从XMPP PubSub节点检索最后一项总是只返回单个项_Java_Xmpp_Publish Subscribe_Smack - Fatal编程技术网

Java 使用Smack从XMPP PubSub节点检索最后一项总是只返回单个项

Java 使用Smack从XMPP PubSub节点检索最后一项总是只返回单个项,java,xmpp,publish-subscribe,smack,Java,Xmpp,Publish Subscribe,Smack,我正在为我的Android应用程序使用最新的Smack(4.1) 从节点检索持久性项目时,是否只返回每个用户最新发布的项目?现在,当我尝试调用getItems时,似乎只从每个用户处获取最新发布的事件。我希望从节点检索所有项目,即使每个用户有多个项目 这是我当前用于检索的代码: PubSubManager manager = new PubSubManager(connectionManager.getConnection()); node = manager.getNode(nodeList

我正在为我的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());  
}
可以看出,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>  

bool@example.com  
测试标题2
测试描述
这是我在调试中收到的唯一东西。除为该特定用户和其他用户发布的最新项目外,不存在其他项目

很明显,我正在接收存储在节点中的项目,但是服务器只为每个用户返回最新发布的项目。我想检索发布到节点的所有项目,不管它是否是该用户的最新项目

这是服务器设置问题吗? 我感谢你的建议。
谢谢

这可能是服务器限制。XEP-60 6.5.7使
max_items
成为可选功能。

我将有效负载项的JID设置为用户的JID。结果,我覆盖了以前的ID,用户以前提交的内容也被覆盖。我将PayLoadItem的ItemID设置为null,这样服务器每次都会生成一个唯一的ID,这样以前的项目就不会被覆盖。

感谢回复流。我目前正在使用eJabberd,并将max_items设置为100。然而,不幸的是,这并没有解决问题。你对如何克服这个限制有什么建议吗?或者是另一种方法?不幸的是,我正在考虑切换到MUC。嗯,你打电话了吗?是的,我在创建新节点时将其添加到配置表单中。我还为eJabberd配置服务器端启用了两个选项:{max_items_node,1000},{max_items,100}。它仍然只获取该特定用户的最新项目。然后,在我没有仔细查看xep60的情况下,我建议您查看提供PubSub的组件。嘿,Flow,我实际上最终解决了问题。仔细查看文档后,我意识到我不让服务器生成它们,这是在覆盖ID。所以我将负载项的ItemID设置为null,现在它可以工作了!以前,我将ID设置为用户的JID,这就是它被覆盖的原因。非常感谢。
<?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>