【问题标题】:Keep XMPP connection(using smack) alive throughout application在整个应用程序中保持 XMPP 连接(使用 smack)处于活动状态
【发布时间】:2012-07-05 18:35:00
【问题描述】:

我正在使用 XMPP 连接(使用 smack)在 android 应用程序中进行聊天。我已经与 openfire 建立了连接,而且我可以发送和接收消息。但问题是当我进入 XMPPClient.java 活动时然后它建立了连接。所以在没有进入该活动之前我无法收到任何消息。那么如何在开始时建立连接然后在其他活动中重用。代码在这两个链接ConnectionSettings filechatscreen中我们可以进行聊天。在此链接中,评论行也是我的问题,所以也请查看该评论。

【问题讨论】:

    标签: android xmpp


    【解决方案1】:

    创建全局 XMPPConnection 对象并使用下面的函数并存储在全局 XMPPConnection 对象中,并在任何地方使用该连接对象。这是一个 gtalk 示例。

        public XMPPConnection login() throws XMPPException {
    
             ConnectionConfiguration config = new
             ConnectionConfiguration("talk.google.com",5222,"gmail.com");   
             config.setSecurityMode(SecurityMode.required);
             config.setTruststoreType("BKS");
             config.setTruststorePath("/system/etc/security/cacerts.bks");
             XMPPConnection connection = new XMPPConnection(config);        
            connection.connect();
            connection.login(username, password);
            Presence presence = new Presence(Presence.Type.available);
            presence.setMode(Presence.Mode.available);  
            connection.sendPacket(presence);
            try {
                Thread.sleep(3000);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
         return connection;
    } 
    

    【讨论】:

    • 你能看看我的问题中的第一个链接,我在其中写了连接代码。那么我如何在任何其他活动中使用它?或者你能给出一些代码以获得清晰的想法.
    • 存在存在 = 新存在(Presence.Type.available); connection.sendPacket(存在); xmppClient.setConnection(连接);在此代码中,setconnection 函数仅在 XMPPClient.java 文件中,所以我如何在不同的活动中使用此代码。
    • 我不想像在有问题的第一个链接中那样执行几次我的连接代码,但只需运行一次该代码,然后我就可以发送和接收消息而无需再次执行。你见过我的吗两个链接?
    • 如果我下次没有建立连接并尝试发送消息,那么它会给我空指针异常。那么你通过实现得到了什么输出?
    • 好的,我知道你的问题了。您想说如果您从应用程序返回并再次启动应用程序并尝试发送消息,那么您会收到空指针异常。我对么?解决方案是为此使用服务。
    猜你喜欢
    • 2012-07-18
    • 2017-06-08
    • 2011-12-01
    • 2013-01-26
    • 2017-08-07
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    相关资源
    最近更新 更多