Мне нужно получать время сервера из 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 шт):
Вот такую модель можно попробовать:
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