0

我已经搜索了很多,试图找到一些关于 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 正在引起问题。

任何人都可以帮忙吗?

4

2 回答 2

0

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 映射到聊天对象

于 2011-01-05T11:08:36.057 回答
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();
    }
于 2012-02-02T11:52:40.090 回答