我已经搜索了很多,试图找到关于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会导致问题。
有人可以帮忙吗?
答案 0 :(得分:0)
应始终将chatManager直接链接到连接。以下是连接类的原始来源:
您可以看到它存储了对聊天管理器的引用:
public synchronized ChatManager getChatManager() {
if (this.chatManager == null) {
this.chatManager = new ChatManager(this);
}
return this.chatManager;
}
您是否在日志中看到“聊天已创建”?我不熟悉谷歌的ChatManager或Smack的impl,但ChatManager将一个简单的线程ID映射存储到聊天对象
答案 1 :(得分:0)
你确定聊天管理员的问题是什么? 在尝试创建一个聊天之前,请确保已连接连接。
为此,您可以检索联系人列表:
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();
}