Заказать пожарные документы - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть чат в Firestore, и, очевидно, мне нужно получать сообщения из каждой комнаты чата, но сообщения никогда не приходят отсортированными по дате, всегда по идентификатору пользователя.

В начале я делалбез использования @ServerTimestamp и генерации даты на самом устройстве Android, но по предложению прямо здесь, в Stackoverflow, я переключился на само хранилище, чтобы сгенерировать дату, в соответствии с предложением, которое должно решить, но оно не работает.Он поступает в порядке, который я не заказывал, он поступает в порядке идентификатора пользователя, lateinit var from_id: String

class Message {

    lateinit var content: String

    @ServerTimestamp
    var timestamp: Timestamp ?= null

    lateinit var from_id: String

    lateinit var type: String

    constructor(content: String, timestamp : Timestamp, from_id: String, type: String) {
        this.content = content
        this.from_id = from_id
        this.timestamp = timestamp
        this.type = type
    }

    constructor(content: String, from_id: String, type: String) {
        this.content = content
        this.from_id = from_id
        this.type = type
    }

    constructor()
}

ControllerChat

...

   override fun sendMessageText(idChatRoom: String, from_id: String, text: String, listenerSendMessage: ListenerSendChatMessage) {
        var message = Message(text, from_id, Message.TEXT)

        chatChannelsCollectionRef
                .document(idChatRoom)
                .collection(MESSAGES)
                .add(message).addOnSuccessListener {
                    listenerSendMessage.onSendChatMessageSucess()
                }.addOnFailureListener {
                    listenerSendMessage.errorSendChatMessage(it)
                }
    }

...


override fun getAllMessageFromChatRoom(idChatRoom: String, listenerGetAllChatMessage: ListenerGetAllChatMessage) {
        Log.d(TAG, "ChatController - getAllMessageFromChatRoom")

        listenerSnapshotAllMessageFromChatRoom = chatChannelsCollectionRef

                .document(idChatRoom)
                .collection(MESSAGES)
                .orderBy("timestamp", Query.Direction.ASCENDING)
                .addSnapshotListener(object : EventListener<QuerySnapshot> {
                    override fun onEvent(querySnapshot: QuerySnapshot?, p1: FirebaseFirestoreException?) {
                        querySnapshot?.let { qSnap ->
                            if (!qSnap.isEmpty) {
                                var documentChange = qSnap.documentChanges

                                for (doc in documentChange) {
                                    var message = doc.document.toObject(Message::class.java)
                                    Log.i(TAG, "Document Change: " + message.content)
                                    listenerGetAllChatMessage.onChatMessage(message)
                                }
                            }
                        }
                    }
                })
    }

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...