Sin setter / getter para objects Firebase

Esta es mi class de Java:

public class OnlineMatch{ private FacebookUser firstplayer; private FacebookUser secondplayer; public OnlineMatch(){ } public OnlineMatch(FacebookUser firstplayer, FacebookUser secondplayer) { this.firstplayer = firstplayer; this.secondplayer = secondplayer; } public FacebookUser getFirstplayer() { return firstplayer; } public void setFirstplayer(FacebookUser firstplayer) { this.firstplayer = firstplayer; } public FacebookUser getSecondplayer() { return secondplayer; } public void setSecondplayer(FacebookUser secondplayer) { this.secondplayer = secondplayer; } 

}

Puedo crear objects correctamente y uploadlos a Firebase. La estructura db es la siguiente: Captura de pantalla tomada del control del panel Firebase

Luego trato de imprimir los valores de mis objects OnlineMatch (código de Kotlin):

 val match = dataSnapshot.child("multiplayer").getValue(OnlineMatch::class.java) if(match!=null){ System.out.println(match) } 

Aquí obtengo esta salida en la console de Android Studio:

9548-19548 / app.simone W / ClassMapper: No se encontró ningún setter / campo para -KqV44f4FUxV8ZDuqL4Y en la class app.simone.multiplayer.model.OnlineMatch

08-01 19: 14: 38.816 19548-19548 / app.simone W / ClassMapper: No se encontró ningún setter / campo para -KqV3sAPXPcYrtr61cDy en la class app.simone.multiplayer.model.OnlineMatch

08-01 19: 14: 38.816 19548-19548 / app.simone W / ClassMapper: No se encontró ningún setter / campo para -KqV2BGH7Z-Y9RxnPGpt en la class app.simone.multiplayer.model.OnlineMatch

Tu código está pidiendo todo en el multiplayer , que incluye todos los objects de OnlineMatch que has insertado allí anteriormente. Puede ver en el post de error que está tratando de encontrar un setter o campo para el ID de inserción -KqV44f4FUxV8ZDuqL4Y que encontró justo debajo del multiplayer Si desea get un solo object OnlineMatch, tendrá que profundizar en los objects de los ID de inserción bajo el multiplayer . Entonces, esto debería darte algo:

 dataSnapshot.child("multiplayer/-KqV44f4FUxV8ZDuqL4Y").getValue(OnlineMatch::class.java) 

En cualquier caso, deberá tener la ID de inserción de su elección, o descubrirla de los hijos de la instantánea y crear una nueva instantánea de ese niño.

Doug Stevenson, tu respuesta fue útil para mí. Creé una matriz de cadenas donde guardo la key y luego repito sobre el niño para cada key específica:

 override fun onDataChange(dataSnapshot: DataSnapshot) { // Get Post object and use the values to update the UI val match = dataSnapshot.children var keysArray = KeysHandler() if(match!=null){ // saving keys into an array for (data in match){ keysArray.addToList(data.key) } // saving an OnlineMatch object into another array repeat(keysArray.list.size){ i-> val onlineMatch = dataSnapshot.child(keysArray.getElement(i)).getValue(OnlineMatch::class.java)!! requestsUsers.add(onlineMatch) } // updating GUI updateRequests() } } 
  • Retrofit-Vertx con RxJava2 en Kotlin IllegalStateException message == null
  • Smart-cast y comparación dentro de Expression después de 'is' type-check
  • Estudio Android convertido a Kotlin: use @JvmStatic en algunos casos
  • NoClassDefFoundError okhttp3.internal.io.FileSystem
  • Kotlin arrayList: no se puede reescribir la list
  • No puedo usar Kotlin para Serenity-bdd
  • ¿Cuál es la diferencia entre shouldbe y shouldbee exactamente en KotlinTest?
  • Kotlin valor negativo negativo de retorno de modul
  • No se puede publicar el cuerpo en Spark REST API usando Kotlin
  • ir a la statement en create-react-kotlin-app no ​​funciona
  • Cargue la configuration xml del muelle de forma dinámica