1

私は 1 つのチャット アプリケーションを開発していますが、正常に動作せず、406 や 407 などのさまざまなエラーが発生します。次のコードが適切かどうかをアドバイスしてください。

アプリケーション起動時の最初のログイン:

  public void LoginWithUser() {

    Thread t = new Thread(new Runnable() {

        @Override
        public void run() {

            SASLAuthentication.unregisterSASLMechanism("org.jivesoftware.smack.sasl.javax.SASLDigestMD5Mechanism");
            SmackInitialization initialization = new SmackInitialization();
            XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration.builder();

                config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
                config.setServiceName(Constants.SERVICE);
                config.setHost(Constants.HOST);
                config.setPort(Constants.PORT);
                config.setResource("myresource");
                config.setDebuggerEnabled(true);
                config.setKeystoreType("AndroidCAStore");
                config.setConnectTimeout(100000);

                try {

                    config.setUsernameAndPassword(getUserName(), password);
                } catch (Exception e) {

                    e.getMessage();
                }
                Constants.connection = new XMPPTCPConnection(config.build()); //new XMPPConnection(Constants.connConfig);
                try {

                    if (!Constants.connection.isConnected()) {
                        Constants.connection.connect();
                    }

                    Log.i("ChatActivity", "Connected to "
                            + Constants.connection.getHost());
                } catch (XMPPException ex) {
                    Log.e("ChatActivity",
                            "Failed to connect to " + Constants.connection.getHost());
                    Log.e("ChatActivity", ex.toString());
                    //  setConnection(null);

                } catch (IOException | SmackException e) {
                    e.printStackTrace();
                    Log.e("my error outer", e.getMessage() + " <- Understand 0 ? !!!");
                }
                try {
                    Log.d("chat : user name", getUserName());
                    try {
                        Log.d("chat : password", AESCrypt.decrypt(Constants.key_store_pair, enc_login_key));

                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    try {

                        SASLAuthentication.blacklistSASLMechanism("SCRAM-SHA-1");
                        Constants.connection.login(getUserName(), password);
                        Constants.connection.getServiceName();
                        Log.d("service name=", Constants.connection.getServiceName());

                    } catch (Exception e) {
                        e.printStackTrace();
                        Log.e("my error inner", e.getMessage() + " <- Understand 1 ? !!!");
                    }

                    Log.i("ChatActivity", "Logged in as    "
                            + Constants.connection.getUser());

                    Log.i("You are valid user",
                            "your Token is  " + Constants.connection.getUser());


                } catch (Exception ex) {


                }


            }

    });
    t.start();

}

正常に接続されました...

その時点で新しい会議室を作成した後、次のメソッドを呼び出してその会議室を登録します。

 private MultiUserChat createGroupChat(XMPPConnection connection,String  room_id, String groupName, String registered_beam_iddd) throws XMPPException, SmackException {

    // This code call when creating new conference room

    Constants.mucM = MultiUserChatManager.getInstanceFor(connection); //new MultiUserChatManager(connection, registered_beam_iddd + "@" + groupName);
    Constants.muc = Constants.mucM.getMultiUserChat(registered_beam_iddd + "@" + groupName);

    if(Constants.connection.isConnected())
    {


        if(Constants.connection.isAuthenticated()) {
            Constants.muc.createOrJoin(room_id + "@" + groupName);  //  

            Form form = Constants.muc.getConfigurationForm();
            Form submitForm = form.createAnswerForm();
            Constants.muc.sendConfigurationForm(submitForm);

            Log.d("Room Created : Name : " , room_id + "@" + groupName);
        }
        else
        {
            //Toast.makeText(getActivity(),"Authenicated false",Toast.LENGTH_LONG).show();
            Log.d("ooo", "authentication failed in AddBeam");
        }
    }
    else
    {
        Toast.makeText(getActivity(),"Connection Loss",Toast.LENGTH_LONG).show();
    }
    return Constants.muc;
    //onesecond
}

会議室の番号(リストビュー)をクリックすると、つまり、会議室のいずれかに入ると、次のメソッドを呼び出して部屋に参加し、履歴を取得します。

  private MultiUserChat joinGroupChat(XMPPConnection connection, String room_id, String groupName, String registered_beam_iddd) throws XMPPException, SmackException {

    // This code called when user enter in Chat-conference room

    if (Constants.connection.isConnected()) {

        if (Constants.muc == null) {
            Constants.mucM = MultiUserChatManager.getInstanceFor(connection); //new MultiUserChatManager(connection, registered_beam_iddd + "@" + groupName);
            Constants.muc = Constants.mucM.getMultiUserChat(registered_beam_iddd + "@" + groupName);
        }
        if (Constants.connection.isAuthenticated()) {

            if (!Constants.muc.isJoined()) {


                DiscussionHistory history = new DiscussionHistory();
                history.setMaxStanzas(20);

                Constants.muc.join(room_id + "@" + groupName, "password", history, Constants.connection.getPacketReplyTimeout());  //  @conference.tubsystems.com  



            } else {
                Log.d("joined: ", room_id + "@" + groupName);
            }
        } else {
            Log.d("ooo", "authentication failed in AddBeam");
        }
    } else {
        Toast.makeText(getApplicationContext(), "Connection Loss", Toast.LENGTH_LONG).show();
        try {

            Constants.connection.connect();
            Log.i("ChatActivity", "Connected to "
                    + Constants.connection.getHost());
        } catch (Exception ex) {
            Log.e("ChatActivity",
                    "Failed to connect to " + Constants.connection.getHost());
            Log.e("ChatActivity", ex.toString());
            //  setConnection(null);
        }
    }
    return Constants.muc;
    //onesecond
}

会議にメッセージを送信する場合:

    private void sendmessage(String text, String room) {

    String to = beamId + "@"+groupname;


    Message msg = new Message(to, Message.Type.groupchat);
    msg.setBody(text);
    if (Constants.connection != null) {
        try {
            Constants.connection.sendPacket(msg);
            Log.d("Send to room  : Name : ", to);
        } catch (Exception e) {
            Log.d("ooo", "msg exception" + e.getMessage());
        }

        messages.add(text);
        msg_send_receive_val = 1;

        new setListAdapter().execute();
     }

  }

しかし、接続エラーが発生したり、406または407エラーが発生したり、会議室に初めて入ると、過去の履歴メッセージが表示されてから自動的に削除されたり、メッセージが送信されなかったり、送信されたりすることがあります。何が問題なのかわかりませんが、メッセージを送信しているときに 406-407 変更 - 受け入れられないエラーが発生し、他のエラーが発生することもあります。

わかりませんが、上記のコードに欠けているもの、または会議室を構成するために必要なものはありますか? できるだけ早く助けてください。

前もって感謝します。

4

0 に答える 0