首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建NoResponseException时获取MultiUserChat

创建NoResponseException时获取MultiUserChat
EN

Stack Overflow用户
提问于 2016-06-15 10:45:08
回答 1查看 466关注 0票数 0

我正在尝试用XMPP创建一个多用户聊天(4.1.4)。我建立了一个登录连接

代码语言:javascript
复制
XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();
configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
    configBuilder.setResource(RESOURCE);
    configBuilder.setServiceName(DOMAIN);
    configBuilder.setHost(HOST);
    XMPPTCPConnection connection = new XMPPTCPConnection(configBuilder.build());
    connection.addConnectionListener(connectionListener);

AsyncTask<Void, Void, Boolean> connectionThread = new AsyncTask<Void, Void, Boolean>() {
        @Override
        protected Boolean doInBackground(Void... arg0) {
            try {
                connection.connect();
                if(connection != null) {
                PingManager mPingManager = PingManager.getInstanceFor(connection);
                mPingManager.setDefaultPingInterval(1000 * 50);
                mPingManager.setPingInterval(1000 * 50);
                connection.setPacketReplyTimeout(1000 * 50);
                mPingManager.registerPingFailedListener(new PingFailedListener() {
                @Override
                public void pingFailed() {
                    // TODO Auto-generated method stub
                    Log.e("PING", "ping failed");
                    // AGain Reconnecting code here..
            }
        });
    }
            } catch (IOException | SmackException | XMPPException e) {
                Log.d(LOCAL_TAG, "connectConnection  exc: "+e.getMessage());
            }
            return null;
        }
    };
    connectionThread.execute();

而且它成功地连接了起来。连接之后,我试着用,

代码语言:javascript
复制
    try {
        SharedPreferences mPreferences = context.getSharedPreferences("App_Pref", Context.MODE_PRIVATE);
        String userJid = userJidAddress(with local ip);
        String userName =  "Test5";
        Log.d(LOCAL_TAG, "createGroupChat  jid: "+userJid+" -- connection.getServiceName(): "+connection.getServiceName());

        MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection);
        MultiUserChat muc = manager.getMultiUserChat(userJid);

        muc.create("InstantRoom");

        Log.d(LOCAL_TAG, "createGroupChat  -- Group CEATED Successfully ");
        Form form = muc.getConfigurationForm();
        Form submitForm = form.createAnswerForm();

        List<FormField> fields = form.getFields();
        Log.d(LOCAL_TAG, "createGroupChat  -- fields.size(): "+fields.size());
        for (int i = 0; i < fields.size(); i++) {
            FormField field = (FormField) fields.get(i);
            if (!FormField.Type.hidden.equals(field.getType()) && field.getVariable() != null) {
                submitForm.setDefaultAnswer(field.getVariable());
            }
        }

        List owners = new ArrayList();
        owners.add("test5"+connection.getServiceName());
        owners.add("test7"); //Another user
        submitForm.setAnswer("muc#roomconfig_roomowners", owners);
        submitForm.setAnswer("muc#roomconfig_persistentroom", true);
        muc.sendConfigurationForm(submitForm);
        muc.join("InstantRoom");

    }
    catch(Exception e){
        Log.d(LOCAL_TAG, "createGroupChat --  Exception: "+e.toString());
    }

但是在创建这个组时,我得到了一个异常

代码语言:javascript
复制
    "org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 50000ms (~50s). Used filter: AndFilter: (FromMatchesFilter (full): test5@172.21.4.199/instantroom, StanzaTypeFilter: org.jivesoftware.smack.packet.Presence)." 

如果我增加PingIntervals和PacketReplyTimeout毫秒,那么我会收到如下消息

"Thread5,tid=4403,WaitingInMainSignalCatcherLoop,Thread*=0xb8e933a8,peer=0x12c000a0,信号守护者“:对信号3的反应。

没有异常和应用程序设置强制自动关闭。希望如此,我在muc.create("InstantRoom")行中得到了异常,因为在该行之后我无法获得日志。有人能帮我找出我做错了什么,为什么我会犯这个错误,以及如何在此之后继续下去。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-15 13:17:20

这两行错了

代码语言:javascript
复制
 MultiUserChat muc = manager.getMultiUserChat(userJid);

        muc.create("InstantRoom");

当您得到一个MUC时,您必须得到一个名称(这样经理就可以告诉您是否已经存在)。

实际上,当您创建一个muc时,您必须输入一个用户名。

所以

代码语言:javascript
复制
String myMUCName = "InstantRoom";
String myMUCService = "conference.myServer";
String myMUCfullName = myMUCName + "@" + myMUCService;
MultiUserChat muc = manager.getMultiUserChat(myMUCfullName);
muc.create(userName);

(如果这不能解决您的问题,请在向您保证它已经在服务器上注册的服务之后告诉我--也许您在表单上会有额外的问题)

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

https://stackoverflow.com/questions/37833230

复制
相关文章

相似问题

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