Как получить доступ к спискам внутри объекта переменной, считанной из базы данных Firestore?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как получить доступ к спискам внутри объекта переменной, считанной из базы данных Firestore?

Сообщение Anonymous »

Это вопрос, связанный с анализом данных списка/массива. Я могу создавать и обновлять документы коллекции, а также читать всю коллекцию всех документов. Как только коллекция прочитана, я могу просмотреть результат и проанализировать все поля, за исключением поля sitePages, сохраненного как массив в Firestore Firebase. В переменной sitePages сохранено 10 экземпляров этого массива. Ниже я приложил снимок экрана со структурой базы данных.
Изображение

На следующем снимке экрана показано, как переменная sitePages (List) хранится в переменной SitesList в приложении. Переменная sitepages хранится как "Arrays$ArrayList"
Изображение

Ниже приведен снимок экрана, показывающий, как массив sitePages считывается из базы данных. Переменная sitePages считывается из базы данных как «Объект[10]» из «ArrayList». Как получить доступ к данным в объекте elementData?
Изображение

Как получить доступ к 10 спискам в объекте elementData, содержащимся в результате, и перенести содержимое в список sitePages. Любая помощь будет оценена по достоинству. Если есть альтернативный способ сохранения или чтения данных, я готов изменить и этот код.
Я включил код, который использую для чтения и записи в базу данных. Думаю, я включил достаточное количество.
data class SitesList(
var siteId: Int = 0,
var siteImage: Int = R.drawable.paraglider1,
var siteName: String = "",
var sitePages: List
) {
fun toMap() = mapOf(
"siteId" to siteId,
"siteImage" to siteImage,
"siteName" to siteName,
"sitePages" to sitePages
)
}

data class SitePagesList(
var pageId: Int = 0,
var pageContent: String = "",
var pageImage: String? = null
) {
fun toMap() = mapOf(
"pageId" to pageId,
"pageContent" to pageContent,
"pageImage" to pageImage,
)
}

var sitesList = mutableStateListOf()

init {
getSitesList()
}

fun getSitesList() {
getSitesListFromDb()
}

private fun createOrUpdateSite(site: SitesList) {
// create or update an individual site from SitesList
sitesDb.collection("sites")
.document(site.siteId.toString())
.get()
.addOnSuccessListener {
if (it.exists()) {
it.reference.update(site.toMap())
.addOnSuccessListener {
// completed successfully
}
.addOnFailureListener {
// error handling logic removed
}
} else {
sitesDb.collection("sites")
.document(site.siteId.toString())
.set(site)
}
}
.addOnFailureListener {
// error handling logic removed
}
}

private fun getSitesListFromDb() {
sitesDb.collection("sites")
.get()
.addOnCompleteListener { task ->
if (task.isSuccessful) {
val listOfDocuments = task.result
sitesList.clear()
for (document in listOfDocuments) {
val sitePages = document.data["sitePages"] // used to view contents of the arrayList
@Suppress("UNCHECKED_CAST") val list = SitesList(
siteId = document.data["siteId"].toString().toInt(),
siteImage = document.data["siteImage"].toString().toInt(),
siteName = document.data["siteName"].toString(),
sitePages = document.data["sitePages"] as List
)
sitesList.add(list)
}
} else {
// error handling logic removed
}
}
}


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

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

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

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

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

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