将 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。总是只返回最后一个书签的主要内容,如果未能解决你的问题,请参考以下文章
Haskell类型错误 - 无法将预期类型“a”与实际类型“RE a”匹配