0

quickblox を使用してチャットを開発していますが、新しいチャットを開くときに問題が発生します。突然、私が切断されたときに他のユーザーが私に送信したすべてのメッセージを受信しました. 問題は、ユーザー A とチャットを開始すると、ユーザー A のチャット ルームでユーザー B、C、D からのチャットを受信することです。

Aユーザーのみを表示する方法を見つけました。しかし、問題は、サーバーがすでに「切断された」メッセージを私に送信していることです。そのため、ユーザー B が私に送信したメッセージが配信された (そして省略された) ため、BI とのチャットを開始してもテキストを受信しません。ユーザーAとチャットしていました。

保留中のメッセージ (一種の履歴) を受信したり、ログインしているチャットのメッセージを取得するにはどうすればよいですか?

私のコードの一部:

            // 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+"-3758@chat.quickblox.com"));

                // 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) {}
                    });
                }
4

1 に答える 1

0

arraylist を作成し、受信したオフライン メッセージをその array-list に格納します。processPacket(Packet packet) 関数にコードを追加して、着信メッセージを配列リストに追加できます。または、Multimaps(Google Guava) を使用して、すべての受信メッセージをキーと共に保存することもできます。特定の人からのメッセージを表示するアクティビティを開くと、その人の名前をキー (マルチマップに保存されている) と照合して、その特定の人のメッセージを表示できます。そして、より良いオプションは、特定の人とのすべての着信および発信メッセージチャットを保存して、以前のチャットをすべて表示してからアクティビティを開くことです.

于 2014-03-19T16:56:08.553 に答える