Получить ожидающие сообщения из чата

Я разрабатываю чат с помощью quickblox, но у меня возникают проблемы при открытии нового чата. Внезапно я получил все сообщения, которые мне присылают другие пользователи, когда я был отключен. Проблема в том, что когда я начинаю чат с пользователем A, я получаю чаты от пользователей B, C, D.. в чате пользователя A.

Я нашел способ показать только пользователей A. Но проблема в том, что сервер уже отправил мне «отключенные» сообщения, поэтому, когда я запускаю чат в BI, я не получаю никакого текста, потому что сообщение, которое отправил мне пользователь B, было доставлено (и пропущено), в то время как я общался с пользователем А.

Как я могу получить ожидающие сообщения (вид истории) или просто получить сообщение чата, в который я вошел?

Кусок моего кода:

            // Create Connection.
            Connection.DEBUG_ENABLED = true;
            config     = new ConnectionConfiguration(CHAT_SERVER);
            connection = new XMPPConnection(config);

            try {
                connection.connect();
                connection.login(chatLogin, password);

                // Create Chat Manager.
                chatManager = connection.getChatManager();



                // Create Chat.
                chat = chatManager.createChat(friendLogin, null);

                //                  // Set listener for outcoming messages.
                //                  chatManager.addChatListener(chatManagerListener);


                // Accept only messages from
                String from_messages = Integer.toString(receiver_chat_id);

                PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class),
                        new FromContainsFilter(from_messages+"[email protected]"));

                // Collect these messages
                PacketCollector collector = connection.createPacketCollector(filter);

                Packet packet = collector.pollResult();

                PacketListener myListener = new PacketListener() {
                    public void processPacket(Packet packet) {
                        if (packet instanceof Message) {
                            Message msg = (Message) packet;
                            if(msg!=null){
                                // Process message
                                System.out.println("Rebem missatge: " +msg.getBody());

                            }
                        }
                    }
                };
                // Register the listener.
                connection.addPacketListener(myListener, filter);


                // Set listener for detect Receiver Status
                if (connection.isConnected()){

                    roster = connection.getRoster();
                    roster.addRosterListener(new RosterListener() {
                        public void entriesDeleted(Collection<String> addresses) {}
                        public void entriesUpdated(Collection<String> addresses) {}
                        public void presenceChanged(Presence presence) {}
                        public void entriesAdded(Collection<String> arg0) {}
                    });
                }

person MarcForn    schedule 11.11.2013    source источник


Ответы (1)


Создайте список массивов и сохраните полученные автономные сообщения в этом списке массивов. вы можете добавить код в свою функцию processPacket (пакетный пакет), чтобы добавить входящие сообщения в список массивов. или вы можете использовать Multimaps (Google Guava) для хранения всех входящих сообщений с ключом. и когда вы открываете действие, которое отображает сообщения от определенного человека, вы можете сопоставить имя этого человека с ключом (хранящимся в мультикарте) и отобразить сообщение этого определенного человека. И лучший вариант — сохранить все входящие и исходящие сообщения чата с определенным человеком, чтобы вы могли показать весь предыдущий чат, а затем открыть действие.

person Fallak Asad    schedule 19.03.2014