Мне нужно получать время сервера из Firestore , но я получаю null

Я релизую приложение на kotlin , где есть возможность общаться в чате , но я не могу использовать Date() или Calendar, потому что я получаю локальное время с устройства , тогда я пытаюсь использовать следующий код.

data class Message(
var message:String,
var id:String,
var receiverID:String=" ",
@ServerTimestamp
var date: Date? = null,
var isChecked:Boolean,
var type:String,)

Это работает если я просто захожу в чат тогда мои сообщения сортируются по времени правильно , но при отправке сообщения у меня срабатывает слушатель и следующая строка мне возвращает null

var date = doc.getTimestamp(KEY_MESSAGE_DATE)

Это слушатель сообщений

database
        .collection(KEY_COLLECTION_USERS)
        .document(preferenceManager.getString(KEY_USER_ID)!!)
        .collection(KEY_COLLECTION_CHAT)
        .addSnapshotListener { value, error ->
            if (error != null) {
                return@addSnapshotListener
            } else {
                if (value == null) {
                    return@addSnapshotListener
                } else {

                    for (documentChange in value.documentChanges) {
                        if (documentChange.type == DocumentChange.Type.ADDED) {
                            var doc = documentChange.document
                            if (doc.getString(KEY_MESSAGE_RECEIVER_ID) == receiverUser.uid) {
                                var text = doc.getString(KEY_MESSAGE).toString()
                                var id = doc.getString(KEY_MESSAGE_ID).toString()
                                var receiverId =
                                    doc.getString(KEY_MESSAGE_RECEIVER_ID).toString()
                                var date = doc.getTimestamp(KEY_MESSAGE_DATE)
                                var isChecked = doc.getBoolean(KEY_MESSAGE_ISCHECKED)!!
                                var type = doc.getString(KEY_TYPE_MESSAGE).toString()
                                var message =
                                    Message(text, id, receiverId, date!!.toDate(), isChecked, type)
                                if (message !in messages) {
                                    messages.add(message)
                                }
                            }
                        }
                    }
                    messages.sortBy { it -> it.date }
                    var messages_test = ArrayList(messages)
                    userChatAdpater.updateList(messages_test)
                    if (messages.size != 0) {
                        mBinding.rvUserChat.smoothScrollToPosition(messages.size - 1)
                    }
                }
            }
        }

так как метка еще не успевает сгенерироваться , это приводит к тому что я не могу сразу же отобразить сообщение , мне нужно перезаходить на экран чата , есть ли способы решить данную проблему?

Пример того что я получаю с сервера

date -> {Value@24504} "# com.google.firestore.v1.Value@891ec4c9
 map_value {
 fields {
key: "type"
value {
  string_value: "server_timestamp"
  }
}
fields {
  key: "local_write_time"
  value {
    timestamp_value {
      nanos: 507000000
      seconds: 1661004559
    }
  }
}
}"

Ответы (1 шт):

Автор решения: Andrew

Вот такую модель можно попробовать:

data class DateModel(
    val nanos: Long,
    val seconds: Long
)

data class Message(
    var message: String,
    var id: String,
    var receiverID: String = " ",
    @SerializedName("timestamp_value")
    var timeStamp: DateModel? = null,
    var isChecked: Boolean,
    var type: String,
)

ваша модель ищет поле которого нет в вашем json, либо я чего-то не понимаю и data смаппится на timestamp_value

→ Ссылка