Smack ChatManager 行为不正常
Posted
技术标签:
【中文标题】Smack ChatManager 行为不正常【英文标题】:Smack ChatManager not behaving properly 【发布时间】:2010-12-29 20:48:39 【问题描述】:我已经搜索了很多,试图找到一些关于 Smack 和他们的 ChatManager 的额外信息,但没有多少,所以是时候来 SOF 了。
我在代码中的某个点做一些非常基本的事情:
chatmanager = con.getChatManager();
chatmanager.createChat(name, message.getThread(),
new MessageListener()
public void processMessage(Chat chat, Message message)
);
System.out.println("Chat created");
Chat chat = chatmanager.getThreadChat(message.getThread());
if (chat == null)
System.out.print("Newly created chat is null");
else
System.out.println("Newly created chat is saved in manager");
我正在尝试验证我刚刚创建的聊天实际上是在 chatManager 中
在我的程序中,我只创建了 1 个 chatManager 实例,但我多次这样做:
chatmanager = con.getChatManager();
我有一种感觉,每次我这样做时,chatManager 都会被重新初始化。我完全错了吗?
无论如何,问题是我没有得到任何输出。 “聊天为空”或“聊天已保存”都不是。让我相信是 chatManager 引起了问题。
谁能帮忙?
【问题讨论】:
你介意发布你的聊天经理吗,我也有一些困难,我的聊天似乎是一种方式 【参考方案1】:chatManager 应始终直接链接到连接。这是连接类的原始来源:
http://fisheye.igniterealtime.org/browse/smack/trunk/source/org/jivesoftware/smack/Connection.java?r=11613
您可以看到它存储了对聊天管理器的引用:
public synchronized ChatManager getChatManager()
if (this.chatManager == null)
this.chatManager = new ChatManager(this);
return this.chatManager;
您是否在日志中看到“已创建聊天”?我不熟悉谷歌的 ChatManager 或 Smack 的实现,但 ChatManager 存储了一个简单的线程 ID 映射到聊天对象
【讨论】:
“Chat created”确实出现在日志中,但在检查聊天时似乎 Chat 对象为空。我最终创建了自己的聊天管理器,它使用我自己的 UUID 跟踪所有聊天,并且效果更好。【参考方案2】:您确定问题出在聊天管理器上吗? 确保连接已连接,然后再尝试创建一个聊天。
为此,您可以检索联系人列表:
try
connection.connect();
connection.login(user, password);
System.out.println("Secured:" + connection.isSecureConnection());
for (RosterGroup group : connection.getRoster().getGroups())
System.out.println(group.getName());
for (RosterEntry entry : group.getEntries())
System.out.println("\t" + entry.getName() + "\t" + entry.getUser());
catch (XMPPException e)
e.printStackTrace();
catch (Exception e)
e.printStackTrace();
【讨论】:
以上是关于Smack ChatManager 行为不正常的主要内容,如果未能解决你的问题,请参考以下文章
Android 中的 XMPP 聊天:ChatManager 未解决