Me gustaría pedir ayuda sobre cómo recuperar datos de Firestore para una matriz de mapas anidada llamada "ciudades" en MutableList, que luego quiero insertar en la vista del reciclador, donde los datos de las "regiones" son para el encabezado y los datos. "ciudades" para los elementos regulares de la lista.
Datos para regiones: MutableList, cuando sigo el procedimiento https://medium.com/firebase-tips-tricks/how-to-map-an-array-of-objects-from-cloud-firestore-to-a-list -of-objects-122e579eae10 por Alex Mamo, funcionó bien, pero los datos para: cities: MutableList , según el mismo enfoque, son nulos (no se pueden recuperar).
¿Puede aconsejarme cómo obtener datos para "ciudades"?
PD: en algún lugar leí la recomendación de iterar sobre "ciudades", pero no tengo idea de cómo, vaya directamente a un ejemplo (idealmente en Kontlin).
Código:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { ….. regionsRef.get().addOnCompleteListener { document -> if (document.isSuccessful()) { val documentSnapshot = document.result // Retrieve array of maps for „regions“ val regions = documentSnapshot.toObject(RegionDocument::class.java)?.regions // Retrieve array of maps for „cities“ val cities = documentSnapshot.toObject(CityDocument::class.java)?.cities … } }Clases de datos para el objeto Ciudad:
data class City( val cityNumber: Long? = null, val cityName: String? = "" ) data class CityDocument( var cities: MutableList<City>? = null)Estructura de la tienda de fuego:


Para poder obtener los datos que corresponden a la estructura de su documento, necesita tres clases:
class Document { var regions: MutableList<Region>? = null } class Region { var cities: MutableList<City>? = null var regionName: String? = null var regionNumber: Long? = null } class City { var cityName: String? = null var cityNumber: Long? = null }Y a continuación puede encontrar una solución para leer todas las ciudades:
val db = FirebaseFirestore.getInstance() val docIdRef = db.collection("collName").document("docId") docIdRef.get().addOnCompleteListener { task -> if (task.isSuccessful) { val document = task.result if (document != null) { val doc = document.toObject(Document::class.java) if (doc != null) { val regions = doc.regions if (regions != null) { for (region in regions) { val cities = region.cities //Do what you need to to do with your List<City>. } } } } } else { Log.d("TAG", task.exception!!.message!!) //Never ignore potential errors! } } Ahora, simplemente reemplace collName y docId con el que tiene en su base de datos.