首页 > 解决方案 > 使用 Kotlin 从 Firebase 检索 HashMap

问题描述

我正在尝试使用 Android Studio 上的 Kotlin 从我的 firebase 数据库中检索对象“游戏”列表。

我的火力数据库

我正在使用下面的代码:

private fun getGamesAvailable() {
    var ref = FirebaseDatabase.getInstance().getReference("games")
    var gamesMutableList: MutableList<Game> = mutableListOf()
    val menuListener = object : ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            for (dataValues in dataSnapshot.children) {
                val game: Game? = dataValues.getValue(Game::class.java)
                gamesMutableList.add(game!!)
            }
            val adapter = GameAdapter(applicationContext, R.layout.games_list, gamesMutableList)
            listViewGames.adapter = adapter
        }
        override fun onCancelled(databaseError: DatabaseError) {
            // handle error
        }
    }
    ref.addListenerForSingleValueEvent(menuListener)
}

但我得到了错误

com.google.firebase.database.DatabaseException:反序列化时需要一个列表,但得到一个类 java.util.HashMap

我知道问题是我正在尝试检索包含玩家列表的游戏列表,但我不知道如何解决这个问题。我在 stackoverflow 上找到了一些关于它的帖子,但我并不真正理解答案以及它们如何解决这个问题。

Android - 反序列化时期望一个列表,但得到一个类 java.util.HashMap

反序列化时需要一个 List,但得到一个类 java.util.HashMap

如果有人能帮助我理解,我将非常感激!

标签: androidfirebasekotlinfirebase-realtime-database

解决方案


没有看到就很难确定Game。但我猜你已经建模mplayersList<Player>or Player[]Player为每个玩家建模数据的类在哪里mplayers

Firebase 对数组/列表的外观有非常严格的定义,而作为键的玩家名称不符合该定义。

mplayers在 JSON 中显示的内容将Map<String, Player>在您的代码中转换为。


推荐阅读