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 未解决

Smack:是不是有必要(甚至可能)明确关闭聊天?

屈光不正之散光

论利用网络爬虫技术抓取他人数据构成不正当竞争

android端怎么接收openfire服务器发送过来的消息

ASmack - 从哪里获得 ChatManager?