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 存储中设置持久性?

如何将现有列表更改为新列表? || android - firebase 实时数据库

如何从 Android 上的 Firebase DataSnapshot 中提取对象列表