Smack ChatManager не ведет себя должным образом - PullRequest
0 голосов
/ 29 декабря 2010

Я довольно долго искал, чтобы попытаться найти дополнительную информацию о 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

ВВ моей программе у меня когда-либо был только один экземпляр chatManager, но я делаю это несколько раз:

 chatmanager = con.getChatManager();

У меня такое ощущение, что каждый раз, когда я это делаю, chatManager переинициализируется.Я полностью ошибаюсь?

В любом случае, проблема в том, что я не получаю никакого вывода.Ни «чат пуст», ни «чат сохранен».Приводит меня к мысли, что chatManager вызывает проблемы.

Может кто-нибудь помочь?

Ответы [ 2 ]

0 голосов
/ 02 февраля 2012

Вы уверены, что проблема в менеджере чатов?Убедитесь, что соединение подключено, прежде чем пытаться создать один чат.

Для этого вы можете, например, получить список контактов:

        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();
    }
0 голосов
/ 05 января 2011

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;
}

Вы видите "чат создан" в журнале? Я не знаком с тем, как Google использует ChatManager или Smack, но ChatManager хранит простую карту идентификатора потока в объекте чата

...