使用Smack 4.1为MultiUserChat添加addMessageListener

时间:2017-08-24 05:43:27

标签: android xmpp smack multiuserchat

我是Android新手,我尝试使用Smack 4.1Ejabberd创建聊天应用。 我使用MultiUserChat实现了群组聊天。我添加了Messagelistener来监听每个新传入的消息并添加到适配器中。 当我进入聊天室并开始聊天列表工作得很好。 但问题是,当我回到任何其他意图,然后回到聊天室,然后当有人给我发消息时,它会多次收到。

也许我多次设置messagelistner

这是我的代码活动类 -

@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();
        }

    }

我该如何解决这个问题?

0 个答案:

没有答案