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
proszę dodać swój kod lub, że to niemożliwe, aby pomóc – MrPk
@MrPk Dodałem mój kod, daj mi znać, jeśli istnieje jakikolwiek błąd –