0

asmack ライブラリの助けを借りて、Android で BOSH Manager を使用して ejabber に接続しようとしています。

しかし、次のエラーが発生しています。

Caused by: java.lang.IllegalStateException: Not logged in to server.
    at org.jivesoftware.smack.Roster.reload(Roster.java:197)
    at org.jivesoftware.smack.BOSHConnection.login(BOSHConnection.java:351)
    at org.jivesoftware.smack.Connection.login(Connection.java:353)
    at com.bcl.BoradCastLocationActivity$StartXMPPConnection.doInBackground(BoradCastLocationActivity.java:75)
    at com.bcl.BoradCastLocationActivity$StartXMPPConnection.doInBackground(BoradCastLocationActivity.java:1)
    at android.os.AsyncTask$2.call(AsyncTask.java:185)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
    ... 4 more

ここに私のコードがあります

SASLAuthentication.registerSASLMechanism("DIGEST-MD5",SASLDigestMD5Mechanism.class);
SASLAuthentication.supportSASLMechanism("DIGEST-MD5", 1);

System.setProperty("smack.debugEnabled", "true");
XMPPConnection.DEBUG_ENABLED = true;
SmackConfiguration.setPacketReplyTimeout(6000);
BOSHConfiguration bconfig = new
         BOSHConfiguration(false, "example.com", 5280, "/xmpp-http-bind/", "example.com");

bconfig.setSASLAuthenticationEnabled(true);
BOSHConnection xmpp = new BOSHConnection(bconfig);

 xmpp.connect();
 xmpp.login("username","password"); // HERE I AM GETTING AN ERROR
4

1 に答える 1

1

aSmack のソースを一瞥すると、これはバグであることがわかりました。簡単な回避策は を呼び出すことです。修正には、行の後Configuration.setRosterLoadedAtLogin(false)から 3 行移動することが含まれます。BOSHConnection.java:350authenticated = true;

aSmack に変更を加えましたbuild.bash。生成された .jar を実行して使用してください。

于 2012-07-30T17:59:02.580 に答える