将 PrivateDataManager 与 (a)Smack 一起使用时,无法获取所有 BookMarkedRooms。总是只返回最后一个书签

Posted

技术标签:

【中文标题】将 PrivateDataManager 与 (a)Smack 一起使用时,无法获取所有 BookMarkedRooms。总是只返回最后一个书签【英文标题】:Can't get all BookMarkedRooms when using PrivateDataManager with (a)Smack. Always returns only the last bookmark 【发布时间】:2013-11-21 10:02:26 【问题描述】:

我添加了 3-4 个永久会议室,并尝试在应用程序启动时连接任何会议室,但是当我尝试获取所有已添加书签的房间时,它只会返回一个房间。 那个房间是上次添加的。

 muc = new MultiMUC(connection, "g2@conference.msngr.com");
        try    
    muc.create("g2");
    Form form = muc.getConfigurationForm();
    Form submitForm = form.createAnswerForm();                
    FormField ff = new FormField("muc#roomconfig_persistentroom");
          ff.setType(FormField.TYPE_BOOLEAN);
          ff.addValue("0");
          ff.setRequired(true);
          ff.setLabel("Make Room Persistent?");
          submitForm.setAnswer("muc#roomconfig_persistentroom", true);              
          List owners = new ArrayList();                  
          owners.add("userdev@msngr.com");  
          submitForm.setAnswer("muc#roomconfig_roomowners", owners);
          muc.sendConfigurationForm(submitForm);
             Bookmarks bookmarks = new Bookmarks();
             BookmarkedConferenceImpl conference = new BookmarkedConferenceImpl("g2@conference.msngr.com");
             conference.setName("My Favorite Room");
             conference.setAutoJoin(true);            
             bookmarks.addBookmarkedConference(conference);  

                 try
                 

                 PrivateDataManager manager = new PrivateDataManager(connection,"userdev@msngr.com");
                 manager.setPrivateData(bookmarks);          
                 
                 catch (Exception e)   

但是当我尝试获取所有 BookMarkedRoom 时,它会返回最后一个添加的会议室。

 BookmarkManager bm = BookmarkManager.getBookmarkManager(connection);
              Collection<BookmarkedConference> rooms=bm.getBookmarkedConferences() ; 
            for(BookmarkedConference room:rooms)                   
                    MultiUserChat  muc = new MultiMUC(connection, room.getJid());
                    muc.join(uid);              
                    muc.addMessageListener(listener);

                    

【问题讨论】:

【参考方案1】:

您似乎总是用创建的最新 MUC 覆盖书签 PrivateData。

不要直接使用 PrivateDataManager,而是使用专门的 BookmarkManager 来完成这项工作。 BookmarkManager 提供了三种方法,可以方便地为您完成这项工作

addBookmarkedConference() getBookmarkedConferences() removeBookmarkedConference()

【讨论】:

以上是关于将 PrivateDataManager 与 (a)Smack 一起使用时,无法获取所有 BookMarkedRooms。总是只返回最后一个书签的主要内容,如果未能解决你的问题,请参考以下文章

通过JayRock将json与IronPython结合使用

将模型 A 与模型 B 和模型 B 的关联关联起来

Haskell类型错误 - 无法将预期类型“a”与实际类型“RE a”匹配

将 SmartTable 与(实体的)实体集绑定

[将Winium(+ Selenium)与python一起使用只允许我打开该应用程序,但不会与之交互?

Gitlab 无法将恢复的分支与另一个分支合并