2016-09-20 43 views
9

无法理解为什么经常出现此错误并且应用程序崩溃。Smack“必须有一个本地(用户)JID设置”错误

以下错误:

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) 

我曾尝试使用下面的链接中给出的解决方案来解决,但它也没有在我case.Url工作是: -https://community.igniterealtime.org/thread/58150

代码中使用用于连接ejabberd和登录使用的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(); 

    } 

实际误差RNS我的用户最后状态与我聊天: -

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"; 
     } 

    } 

我已经打上$$符号

+0

请加你的代码或不可能帮到 – MrPk

+0

@MrPk我加了我的代码,让我知道是否有任何错误 –

回答

0

用户名这是错的错误行:

你试着与用户连接@服务器@服务器。不要concat Jid部分,它是自动的。

更多的,你必须指定用户的RESOURCE(例如设备名称,默认为Spark)。

注意:desktop smack可能会针对android使用不同的类。 也许你有任何其他认证问题,但指定一个错误的JID可以让你“连接”而不是“登录”,并省略资源制造一些功能。

+1

当我调试应用程序时,代码工作正常。在Android 7.0和4.0设备上发生此错误 –

+0

@Anil现在看看,让我知道 – MrPk

+0

让我调试应用程序 –

相关问题