2017-08-08 21 views
0

私はアンドロイドで新しく、smack apiとejabberdを使用してチャットアプリケーションを作成しようとしました。 私は1対1のチャットとその良い仕事を実装します。私はチャットルームのメッセージを受け取ることができません。 どうすればいいですか?ここsamck API、XMPPを使用してチャットルームメッセージを受け取る方法

は、チャットルームのメッセージとその作業良いを送信するために使用されている()私はxmpp.java sendGroupMessage内のすべての接続のXMPP接続を実装xmpp.java

public class MyXMPP { 
     public MyXMPP(MyService context, String serverAdress, String logiUser, 
         String passwordser) { 
      this.serverAddress = serverAdress; 
      this.loginUser = logiUser; 
      this.passwordUser = passwordser; 
      this.context = context; 
      this.applicationContext = context; 
      init(); 
     } 
     public static MyXMPP getInstance(MyService context, String server,String user, String pass) { 
      if (instance == null) { 
       instance = new MyXMPP(context, server, user, pass); 
       instanceCreated = true; 
      } 
      return instance; 
     } 
     public org.jivesoftware.smack.chat.Chat Mychat; 
     ChatManagerListenerImpl mChatManagerListener; 
     MMessageListener mMessageListener; 
     static { 
      try { 
       Class.forName("org.jivesoftware.smack.ReconnectionManager"); 
      } catch (ClassNotFoundException ex) { 
       // problem loading reconnection manager 
      } 
     } 
     public void init() { 
      gson = new Gson(); 
      mMessageListener = new MMessageListener(context); 
      mChatManagerListener = new ChatManagerListenerImpl(); 
      initialiseConnection(); 

     } 
     private void initialiseConnection() { 
      XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration 
        .builder(); 
      config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled); 
      config.setServiceName(serverAddress); 
      config.setHost("192.168.0.101"); 
      config.setPort(5222); 
      config.setDebuggerEnabled(true); 
      XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true); 
      XMPPTCPConnection.setUseStreamManagementDefault(true); 
      connection = new XMPPTCPConnection(config.build()); 
      XMPPConnectionListener connectionListener = new XMPPConnectionListener(); 
      connection.addConnectionListener(connectionListener); 
     } 
     private class ChatManagerListenerImpl implements ChatManagerListener { 
      @Override 
      public void chatCreated(final org.jivesoftware.smack.chat.Chat chat, 
       final boolean createdLocally) { 
       if (!createdLocally) 
        chat.addMessageListener(mMessageListener); 

      } 

     } 
     public void sendMessage(ChatMessage chatMessage) { 
      String body = gson.toJson(chatMessage); 
      Mychat = ChatManager.getInstanceFor(connection).createChat(
        chatMessage.receiver + "@" 
          + context.getString(R.string.server), 
        mMessageListener); 
      chat_created = true; 
      final Message message = new Message(); 
      message.setBody(body); 
      message.setStanzaId(chatMessage.msgid); 
      message.setTo(chatMessage.receiver); 
      message.setFrom(chatMessage.sender); 
      message.setType(Message.Type.chat); 
      Mychat.sendMessage(chatMessage.body); 
     } 

     public void sendGroupMessage(ChatMessage chatMessage) { 
      MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection); 
      MultiUserChat multiUserChat = manager.getMultiUserChat(chatMessage.receiver); 
      try { 
       multiUserChat.join(chatMessage.sender,"12345"); 
    //   multiUserChat.addMessageListener((MessageListener) mMessageListener); 
      } catch (XMPPException.XMPPErrorException e) { 
       e.printStackTrace(); 
      } catch (SmackException e) { 
       e.printStackTrace(); 
      } 
      Message message = new Message(chatMessage.receiver, Message.Type.groupchat); 
      message.setBody(chatMessage.body); 
      message.setType(Message.Type.groupchat); 
      message.setFrom(chatMessage.sender); 
      message.setTo(chatMessage.receiver); 
      multiUserChat.sendMessage(message); 
     } 

     /* Its work good for one to one chat */ 
     private class MMessageListener implements ChatMessageListener { 
      Context context; 
      public MMessageListener(Context c) { 
       this.context = c; 
      } 
      @Override 
      public void processMessage(final org.jivesoftware.smack.chat.Chat chat, 
       final Message message) { 
       if (message.getType() == Message.Type.chat 
         && message.getBody() != null) { 
        Log.d("Message received",message.getBody); 
       } 
      } 
     } 
    } 

です。 問題はチャットルームのメッセージを受信して​​います。

私もここでアンドロイドログ にメッセージを受け取るあなたが使用しているenter image description here

+0

あなたが1でそれらを受け取るメッセージを送信しないことが可能であることを意味します:1チャット? –

+0

はい@SarthakMittal –

+0

メッセージが正常に送信されたことをどのように検証できますか? –

答えて

1

Chatクラスは廃止された画像です! あなたのスティックライブラリーを最新版(現在4.2)にアップデートすることをお勧めします。ここで

はあなたがで受信メッセージのリスナーを付けることができる方法であるスマック-4.2

XMPPTCPConnection connection; // Assuming you have the connection object 

org.jivesoftware.smack.chat2.ChatManager chatManager = org.jivesoftware.smack.chat2.ChatManager.getInstanceFor(connection); 
chatManager.addIncomingListener(new IncomingChatMessageListener() 
{ 
    @Override 
    public void newIncomingMessage(EntityBareJid from, Message message, org.jivesoftware.smack.chat2.Chat chat) 
    { 
     // Message received here 
    } 
}); 
+0

私はxmpp.javaを更新しました –

+0

私は余裕を持ってすぐに見ています:) –

+0

okk @ Sarthak私のコードを更新する –

関連する問題