登录服务器时未登录服务器
Posted
技术标签:
【中文标题】登录服务器时未登录服务器【英文标题】:Not logged in to server while login into a server 【发布时间】:2012-07-30 14:50:39 【问题描述】:我正在尝试借助 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
【问题讨论】:
好像是 aSmack 的一个 bug,是 BOSH 补丁和 3.2.0 分支合并造成的。 【参考方案1】:浏览一下 aSmack 的源代码表明这是一个错误。一个快速的解决方法是调用Configuration.setRosterLoadedAtLogin(false)
,修复方法包括将BOSHConnection.java:350
的3 行移到authenticated = true;
行之后。
我已在 aSmack 中进行了更改,请运行 build.bash
并使用生成的 .jar。
【讨论】:
我刚刚添加了bconfig.setRosterLoadedAtLogin(false);
,现在我登录成功了,谢谢哥们以上是关于登录服务器时未登录服务器的主要内容,如果未能解决你的问题,请参考以下文章
与会者在使用服务帐户、谷歌日历 API 创建活动时未收到会议邀请
使用 gorilla 会话时未保存 golang 中的会话变量