
На следующем снимке экрана показано, как переменная 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
}
}
}
Отредактировано с добавлением комментариев/кода/логов по запросу:
Вот код журнала...
Log.d(TAG, "sitePages => $sitePages")
Log.d(TAG, "list.sitePages => ${list.sitePages}")
Вот результат (извиняюсь за количество текста):
2026-02-06 18:31:50.317 19033-19033 ContentValues com.example.cloudbase D sitePages => [{pageImage=null, pageContent=This ridge site ..., pageId=0}, {pageImage=null, pageContent=От шоссе 1A повернуть на запад..., pageId=1}, {pageImage=null, pageContent=Сайт представляет собой горный хребет и запускается..., pageId=2}, {pageImage=null, pageContent=Верхняя площадка на гребне..., pageId=3}, {pageImage=null, pageContent=Сам сайт обозначен..., pageId=4}, {pageImage=null, pageContent=Даже не думайте..., pageId=5}, {pageImage=null, pageContent=Это Мюллер...!, pageId=6}, {pageImage=null, pageContent=, pageId=7}, {pageImage=null, pageContent=https://www.mullerwindsports.com/, pageId=8}, {pageImage=null, pageContent=Контактное лицо локального сайта:
fly@mullerwindsports.com
1(403)932-6760, pageId=9}]
2026-02-06 18:31:50.317 19033-19033 ContentValues com.example.cloudbase D list.sitePages => [{pageImage=null, pageContent=Этот участок хребта..., pageId=0}, {pageImage=null, pageContent=От шоссе 1A поверните на запад..., pageId=1}, {pageImage=null, pageContent=Этот сайт..., pageId=2}, {pageImage=null, pageContent=Верхняя площадка at..., pageId=3}, {pageImage=null, pageContent=Сам сайт..., pageId=4}, {pageImage=null, pageContent=Даже не думайте..., pageId=5}, {pageImage=null, pageContent=Это Мюллер...!, pageId=6}, {pageImage=null, pageContent=, pageId=7}, {pageImage=null, pageContent=https://www.mullerwindsports.com/, pageId=8}, {pageImage=null, pageContent=Контакт на локальном сайте:
fly@mullerwindsports.com
1(403)932-6760, pageId=9}]
Вот цикл, пытающийся получить доступ переменные в sitePages...
var index = 0
val size = list.sitePages.size
while (index < 10) {
Log.d(TAG, "pageId => ${list.sitePages[index].pageId}")
Log.d(TAG, "pageImage => ${list.sitePages[index].pageImage}")
Log.d(TAG, "pageContent => ${list.sitePages[index].pageContent}")
index++
}
Использование list.sitePages.size дает правильный результат 10, но доступ к "list.sitePages[index].pageId" завершается сбоем.
Я пробовал .toString().toInt() после pageId.
Я также пробовал "list.sitePages.toMutableList()[0]", но это тоже дает сбой.
/>- - -
Вот еще один небольшой пример кода.
Log.d(TAG, "listOf(list.sitePages[index]) => ${listOf(list.sitePages[0])}")
val list2 = listOf(list.sitePages[0])
val tempId = list2[0].pageId
Результат Log.d:
listOf(list.sitePages[index]) => [{pageImage=null, pageContent=This ridge site is ..., pageId=0}]
При выполнении строки «val tempId = list2[0].pageId» происходит сбой приложения.
Значение list2 ниже — из режима отладки.
list2 = {Collections$SingletonList@40522} size = 1
0 = {HashMap@40525} size = 3
"pageImage" -> null
key = "pageImage"
value = null
"pageContent" -> "This ridge site is ..."
key = "pageContent"
value = "This ridge site is ..."
"pageId" -> {Long@40535} 0
key = "pageId"
value = {Long@40535} 0
Подробнее здесь: https://stackoverflow.com/questions/798 ... tore-datab
Мобильная версия