Как получить список и извлечь данные из результата в Jetpack Compose из FirebaseFirestore get() [дубликат]Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как получить список и извлечь данные из результата в Jetpack Compose из FirebaseFirestore get() [дубликат]

Сообщение Anonymous »

Отредактировано: возможно, я недостаточно ясно выразился в своем первоначальном вопросе. Я могу прочитать данные из файла, но не могу извлечь их из полученных данных чтения. В режиме отладки выполнение останавливается на «document.toObject» и приводит к сбою приложения. Как преобразовать содержимое каждого документа в результате в запись в списке? См. пример кода ниже.
_sitesList.clear()
for (document in result) {
val site = document.toObject()
site.let { site ->
_sitesList.add(site)
}
}

Оригинал:
Я могу сохранить и обновить содержимое своего списка в FirebaseFirestore, но не могу прочитать и заполнить результат get() в тот же список. Кажется, он считывает данные в результат, но я не могу извлечь данные из результата в список. Сообщений об ошибках нет, приложение просто вылетает.
Ниже я включил код для сохранения/обновления коллекции (он работает нормально) и код для чтения коллекции. Я также пробовал MutableStateFlow, но безуспешно.
Я пробовал следующее либо целиком, либо в цикле for по элементам, но безуспешно:
.toObjects(SitesList::class.java)
.toObject(SitesList::class.java)

Я также пробовал .addSnapshotListener и .onCompleteListener.
Иногда мне нужно использовать цикл while из трех итераций, чтобы данные можно было прочитать.
Я также безуспешно пытался прочитать отдельный документ
.document("0").
Чего мне не хватает?
data class SitesList(
var siteId: Int,
var siteImage: Int,
var siteName: String,
var sitePages: List
)

data class SitePagesList(
var pageId: Int,
var pageContent: String,
var pageImage: String? = null
)

@HiltViewModel
class SitesViewModel @Inject constructor(
val sitesAuth: FirebaseAuth,
val sitesDb: FirebaseFirestore,
val sitesStorage: FirebaseStorage
) : ViewModel() {

private val _sitesList = mutableStateListOf()
val sitesList = mutableStateListOf()

init {
getSitesList()
}

private fun createOrUpdateSite(siteList: SitesList) {
sitesDb.collection("sites")
.document(siteList.siteId.toString())
.get()
.addOnSuccessListener {
if (it.exists()) {
it.reference.update(siteList.toMap())
.addOnSuccessListener {

}
.addOnFailureListener {
// handle error
}
} else {
sitesDb.collection("sites")
.document(siteList.siteId.toString())
.set(siteList)
}
}
.addOnFailureListener {
// handle error
}
}

private fun getSitesList() {
sitesDb.collection("sites")
.get()
.addOnSuccessListener { result ->
_sitesList.clear()
for (document in result) {
val site = document.toObject()
site.let { site ->
_sitesList.add(site)
}
}
}
.addOnFailureListener {
// error handler
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... tpack-comp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»