2016-09-20 2 views
2

채팅 용 ejabberd 서버를 사용하는 Smack 4.1 라이브러리를 사용하여 채팅 응용 프로그램을 개발했습니다.Xmpp String utils가 자주 응용 프로그램을 중단합니다.

모든 채팅은 제대로 작동하지만 언젠가는 아래의 오류와 함께 응용 프로그램이 다운되며 왜 이런 일이 자주 발생하는지 이해할 수 없습니까? 오류 아래

는 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 라이브러리는 그 사람의 JID가 콜백에 포함될 것으로 예상합니다. 하지만 당신은 그것을 무시하고 따라서 충돌합니다.

명단 관련 XMPP를 사용 중지하고 충돌이 지속되는지 확인해보십시오.

+0

명단과 관련된 기능을 사용하고 있지 않습니다. 그렇다면 Smack의 명단 기능을 해제하는 설정이 있습니까? –

관련 문제