2016-09-20 9 views
9

Nie można zrozumieć, dlaczego ten błąd często przychodzi i aplikacja ulega awarii.Smack "Musi mieć lokalny (użytkownika) zestaw JID" błąd

Poniżej błędu:

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.studyboard/com.studyboard.ChatMessageActivity}: java.lang.IllegalArgumentException: Must have a local (user) JID set. Either you didn't configure one or you where not connected at least once 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2493) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2555) 
     at android.app.ActivityThread.access$800(ActivityThread.java:176) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1437) 
     at android.os.Handler.dispatchMessage(Handler.java:111) 
     at android.os.Looper.loop(Looper.java:194) 
     at android.app.ActivityThread.main(ActivityThread.java:5576) 
     at java.lang.reflect.Method.invoke(Method.java) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751) 
Caused by java.lang.IllegalArgumentException: Must have a local (user) JID set. Either you didn't configure one or you where not connected at least once 
     at org.jivesoftware.smack.filter.IQReplyFilter.<init>(IQReplyFilter.java:94) 
     at org.jivesoftware.smack.AbstractXMPPConnection.createPacketCollectorAndSend(AbstractXMPPConnection.java:690) 
     at org.jivesoftware.smackx.iqlast.LastActivityManager.getLastActivity(LastActivityManager.java:239) 
     at com.studyboard.utils.ChatUtil.getLastActivity(ChatUtil.java:674) 
     at com.studyboard.ChatMessageActivity.initChat(ChatMessageActivity.java:339) 
     at com.studyboard.ChatMessageActivity.onCreate(ChatMessageActivity.java:220) 
     at android.app.Activity.performCreate(Activity.java:6005) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2446) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2555) 
     at android.app.ActivityThread.access$800(ActivityThread.java:176) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1437) 
     at android.os.Handler.dispatchMessage(Handler.java:111) 
     at android.os.Looper.loop(Looper.java:194) 
     at android.app.ActivityThread.main(ActivityThread.java:5576) 
     at java.lang.reflect.Method.invoke(Method.java) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751) 

próbowałem rozwiązać stosując rozwiązanie podane w poniższym adresie URL, ale jego też nie działa w moim case.Url jest: -https://community.igniterealtime.org/thread/58150

kod za pomocą do łączenia się z ejabberd i logowania za pomocą Smack 4.1: -

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(); 

    } 

Błąd rzeczywisty występuje w funkcji poniżej której RNS mnie ostatni status użytkownika na ze jestem na czacie: -

public String getLastActivity(XMPPTCPConnection objXmpptcpConnection, String strUser) { 

     try { 
      LastActivityManager objLastActivityManager = LastActivityManager.getInstanceFor(objXmpptcpConnection); 
      LastActivity objLastActivity = null; 
      $$ objLastActivity = objLastActivityManager.getLastActivity(strUser + "@" + Constants.HOST); 
      System.out.println("MESSAGE:" + objLastActivity.getStatusMessage()); 
      System.out.println("IDLE TIME::" + objLastActivity.getIdleTime()); 

      return convertTime(objLastActivity.getIdleTime()); 

     } catch (SmackException.NoResponseException e) { 
      e.printStackTrace(); 
      return "Offline"; 
     } catch (XMPPException.XMPPErrorException e) { 
      e.printStackTrace(); 
      return "Offline"; 
     } catch (SmackException.NotConnectedException e) { 
      e.printStackTrace(); 
      return "Offline"; 
     } 

    } 

mam zaznaczone linią błędu z $$ symbolem

+0

proszę dodać swój kod lub, że to niemożliwe, aby pomóc – MrPk

+0

@MrPk Dodałem mój kod, daj mi znać, jeśli istnieje jakikolwiek błąd –

Odpowiedz

0

Hasło to jest złe:

Ty próbujesz połączyć się z użytkownikiem @ serwer @ serwer. Nie przyłączaj się do Jid, jest to automatyczne.

Więcej, musisz określić RESOURCE użytkownika (Przykład, nazwa urządzenia, domyślnie to Spark).

Uważaj: pulpit może używać różnych klas przeciwko Androidowi. Może masz inny problem z uwierzytelnianiem, ale określ zły identyfikator JID, który pozwala ci łączyć się, ale nie "logować się" i omijać zasób, niektóre funkcje.

+1

Kod działa dobrze, gdy jestem debugowania błędu application.This występuje na Androidzie 7.0 i 4.0 urządzeń –

+0

@Anil look teraz i daj mi znać – MrPk

+0

Pozwól mi debugować aplikację –

Powiązane problemy