Xmpp String utils 经常使应用程序崩溃

Posted

技术标签:

【中文标题】Xmpp String utils 经常使应用程序崩溃【英文标题】:Xmpp String utils crashes the app frequently 【发布时间】:2016-09-20 09:02:50 【问题描述】:

我使用 Smack 4.1 库开发了聊天应用程序,该库使用 ejabberd 服务器进行聊天。

所有聊天都正常运行,但有时应用程序因以下错误而崩溃,无法理解为什么会频繁发生这种情况?

以下错误来自 crashlytics:-

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.indexOf(int)' on a null object reference
       at org.jxmpp.util.XmppStringUtils.parseBareJid(XmppStringUtils.java:117)
       at org.jivesoftware.smack.roster.Roster$RosterPushListener.handleIQRequest(Roster.java:1386)
       at org.jivesoftware.smack.AbstractXMPPConnection$2.run(AbstractXMPPConnection.java:1051)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
       at java.lang.Thread.run(Thread.java:761)

以下代码用于连接和登录 ejabberd:-

   XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration.builder();
    config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
    config.setServiceName(Constants.HOST);
    config.setPort(Constants.PORT);
    config.setHost(Constants.HOST);
    config.setDebuggerEnabled(true);
    config.setSendPresence(true);
    config.setUsernameAndPassword(strUsername + "@" + Constants.HOST, strPassword);


    SASLAuthentication.blacklistSASLMechanism("SCRAM-SHA-1");
    SASLAuthentication.blacklistSASLMechanism("DIGEST-MD5");
    SASLAuthentication.unBlacklistSASLMechanism("PLAIN");
    objXmpptcpConnection = new XMPPTCPConnection(config.build());
    objXmpptcpConnection.setUseStreamManagement(true);
    objXmpptcpConnection.setUseStreamManagementResumption(true);
    try 
        objXmpptcpConnection.connect();
        System.out.println("Connected to===>" + objXmpptcpConnection.getHost());
        objXmpptcpConnection.login();

     catch (XMPPException e) 
        e.printStackTrace();

     catch (SmackException e) 
        e.printStackTrace();

     catch (IOException e) 
        e.printStackTrace();

    

是否有任何我错过的设置或请提出解决方案以避免此问题?

【问题讨论】:

【参考方案1】:

我需要查看代码以了解究竟发生了什么。但是从您的堆栈跟踪来看,当某人被添加到您的好友列表时,XMPP lib 会在回调中期望该人的 JID。但是您将其传递为 null 并因此导致崩溃。

尝试禁用与名册相关的 XMPP,看看崩溃是否仍然存在。

【讨论】:

我没有使用任何与名册相关的功能。所以,是否有任何设置可以关闭 Smack 的名册功能

以上是关于Xmpp String utils 经常使应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

在 xmpp 群聊中发送聊天标记

使用python在谷歌应用引擎上出现xmpp错误

无法将 java.util.ArrayList 的实例反序列化出 VALUE_STRING

如何从 XMPP 获取图像?

无法让成员进入房间 - XMPP

XMPP 和 PHP 流式传输