【问题标题】:Android Firebase how to get child that contains a listAndroid Firebase如何获取包含列表的孩子
【发布时间】: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()
)

【问题讨论】:

    标签: android firebase kotlin firebase-realtime-database google-cloud-platform


    【解决方案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()
    

    【讨论】:

    • 嘿阿尔菲塔普。我可以帮助您了解其他信息吗?如果您认为我的回答对您有帮助,请考虑采纳(✔️)。我真的很感激。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多