0

I'm new to android and I tried to create a chat app using Smack 4.1 and Ejabberd. I have implemented a group chat using MultiUserChat. I have added Messagelistener to listen every new incoming message and add into adapter. When I enter into chat room and start chat list works very well. But the problem is when I back to the any other intent and then go back into chat room then when someone messages me, it is received multiple times.

Maybe I set messagelistner multiple times.

Here is my code Activity Class -

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chatiing);
        user2 = getIntent().getExtras().getString("JID");
        msg_edittext = (EditText)findViewById(R.id.messageEditText);

        msgListView = (ListView)findViewById(R.id.msgListView);
        msgListView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);

        chatlist = new ArrayList<ChatMessage>();
        chatlist.clear();
        chatAdapter = new ChatAdapter(ChattingGroup.this,chatlist);

        msgListView.setAdapter(chatAdapter);
        autoJoinRoom(user1,room_name,new View(getApplicationContext()));
        ImageButton sendButton = (ImageButton)findViewById(R.id.sendMessageButton);
        sendButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                sendTextMessage(view);
            }
        });


    }


public void  autoJoinRoom(String user, String room, View view){
        LoginActivity activity = new LoginActivity();
        XMPPTCPConnection connection = activity.getmService().xmpp.connection;
        MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection);
        MultiUserChat multiUserChat = manager.getMultiUserChat(room);
        try {
            multiUserChat.join(user,"12345");
            chatlist.clear();
            multiUserChat.addMessageListener(new MessageListener() {
                @Override
                public void processMessage(Message message) {
                    if(message.getBody() != null){
                        Log.d("New Message Received",message.getBody());
                        chatlist.add(message.getBody());
                        new Handler(Looper.getMainLooper()).post(new Runnable() {
                            @Override
                            public void run() {
                                /* Change adapter  */
                                ((BaseAdapter) msgListView.getAdapter()).notifyDataSetChanged();
                            }
                        });

                    }
                }
            });
        } catch (XMPPException.XMPPErrorException    e) {
            e.printStackTrace();
        } catch (SmackException e) {
            e.printStackTrace();
        }

    }

How can I solve this problem ?

Aditi Parikh
  • 1,522
  • 3
  • 13
  • 34
Kaushik Makwana
  • 2,422
  • 9
  • 31
  • 50

0 Answers0