Smack ChatManager表现不正常

时间:2010-12-29 20:48:40

标签: android chat xmpp smack

我已经搜索了很多,试图找到关于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会导致问题。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分: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的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();
    }