首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android在加入MultiUserChat时给出超时异常

Android在加入MultiUserChat时给出超时异常
EN

Stack Overflow用户
提问于 2015-09-24 12:56:52
回答 2查看 1.5K关注 0票数 2

我正在尝试加入一个MultiUserChat使用Smack上的安卓。目前,我可以聊天1对1完全好,我是连接到服务器,因为我在网上显示。我遵循了这里提供的示例。

我有以下代码来加入一个MultiUserChat (MUC)。

代码语言:javascript
复制
final XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
        .setUsernameAndPassword(user.getUsername(), user.getJabberPassword())
        .setServiceName("app.buur.nu")
        .setHost("app.buur.nu")
        .setPort(5222)
        .build();

AbstractXMPPConnection connection = new XMPPTCPConnection(config);

String room = "testroom";
MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection);
MultiUserChat muc = manager.getMultiUserChat(room + "@groups.app.buur.nu"); 
try {
    muc.join(user.getUsername(), null, null, connection.getPacketReplyTimeout());
} catch (SmackException.NoResponseException e) {
    e.printStackTrace();
} catch (XMPPException.XMPPErrorException e) {
    e.printStackTrace();
} catch (SmackException.NotConnectedException e) {
    e.printStackTrace();
}

但这给了我org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 5000ms (~5s). Used filter: AndFilter: (FromMatchesFilter (full): testroom@groups.app.buur.nu/test, StanzaTypeFilter: org.jivesoftware.smack.packet.Presence).

我试着把超时时间增加到10000毫秒,但我仍然得到了一个超时。这里有什么问题吗?创建一对一的聊天很好,connection.isConnected())返回真.

结果发现我犯了个错误

<presence to="app.buur.nu/7c65be6" id="lgcSp-4" type="error"><x xmlns="http://jabber.org/protocol/muc"/><c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://www.igniterealtime.org/projects/smack" ver="os2Kusj3WEOivn5n4iFr/ZEO8ls="/><error code="401" type="auth"><not-authorized xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></presence>

基本上,当我试图加入这个房间时,身份验证还没有完成。在身份验证完成后,可以添加侦听器以接收更新吗?我看到了https://www.igniterealtime.org/builds/smack/docs/latest/javadoc/org/jivesoftware/smack/SASLAuthentication.html#authenticate%28java.lang.String,%20javax.security.auth.callback.CallbackHandler%29,但是实现自己的身份验证机制似乎有点过火了.

不是有onAuthenticationCompletedListener之类的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-25 17:48:19

结果表明,不需要实现SASLMechanism,您可以执行以下操作:

代码语言:javascript
复制
connection.addConnectionListener(new ConnectionListener() {
        @Override
        public void connected(XMPPConnection connection) {

        }

        @Override
        public void authenticated(XMPPConnection connection, boolean resumed) {
            joinMUCRooms();
        }

        @Override
        public void connectionClosed() {

        }

        @Override
        public void connectionClosedOnError(Exception e) {

        }

        @Override
        public void reconnectionSuccessful() {

        }

        @Override
        public void reconnectingIn(int seconds) {

        }

        @Override
        public void reconnectionFailed(Exception e) {

        }
    });

错误现在不再显示,同时保持代码“相当”干净。

票数 1
EN

Stack Overflow用户

发布于 2015-09-25 17:50:30

这个房间存在吗?如果不是,那么您需要首先创建它,使用create()并发送一个即时表单。您还应该向openfire开发人员报告,MUC错误的存在丢失了“from”属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32761940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档