Android Firebase如何获取包含列表的孩子
Posted
技术标签:
【中文标题】Android Firebase如何获取包含列表的孩子【英文标题】:Android Firebase how to get child that contains a list 【发布时间】:2022-01-08 07:12:42 【问题描述】:我在尝试从 Firebase 获取包含列表 my_pokemon
的子节点 trainer_profile
时遇到此错误。
W/ClassMapper: No setter/field for my_pokemon found on class com.tapmaxalf.poketest.model.TrainerProfile
我的 Firebase 数据库:
我的 valueEventListener 看起来像这样:
private fun getTrainerProfile(userId: String)
firebaseDatabase.child("trainer_profile").child(userId)
.addValueEventListener(object : ValueEventListener
override fun onDataChange(snapshot: DataSnapshot)
snapshot.getValue(TrainerProfile::class.java).let trainerProfile ->
if (trainerProfile != null)
viewModelScope.launch (Dispatchers.IO)
_state.value = state.value.copy(trainerProfile = trainerProfile)
userDao.updateTrainerProfile(trainerProfile, userId)
canProfileBeAdded(trainerProfile.timeSentToDatabase)
addProfileCountdown(trainerProfile.timeSentToDatabase)
override fun onCancelled(error: DatabaseError)
updateError(AuthErrors.GenericError.messageResource)
)
还有我的教练资料
data class TrainerProfile(
val trainerName: String = "",
val location: String = "",
val trainerLevel: String = "",
val trainerCode: String = "",
val profileImage: String = "",
val gifts: Boolean = false,
val trade: Boolean = false,
val raid: Boolean = false,
val timeSentToDatabase: Long = 0,
val myPokemon: List<MyPokemon> = emptyList()
)
【问题讨论】:
【参考方案1】:您收到以下警告:
W/ClassMapper: No setter/field for my_pokemon found on class com.tapmaxalf.poketest.model.TrainerProfile
因为你数据库中的列表叫my_pokemon
,而数据库中叫myPokemon
,这是不正确的。两个名称必须匹配。这个问题最简单的解决方案是在你的字段之前使用一个注释,如下所示:
@get:PropertyName("my_pokemon")
@set:PropertyName("my_pokemon")
@PropertyName("my_pokemon")
val myPokemon: List<MyPokemon> = emptyList()
【讨论】:
嘿阿尔菲塔普。我可以帮助您了解其他信息吗?如果您认为我的回答对您有帮助,请考虑采纳(✔️)。我真的很感激。谢谢!以上是关于Android Firebase如何获取包含列表的孩子的主要内容,如果未能解决你的问题,请参考以下文章
如何使用kotlin在Android的firebase中获取child的键值
如何以编程方式获取 Firebase 中的注册用户列表 [重复]
如何使用firebase作为数据库在android中获取附近的用户名?
如何在 Android 上的 Firebase 存储中设置持久性?