android - 使用 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
如果有人能帮助我理解,我将非常感激!
解决方案
没有看到就很难确定Game
。但我猜你已经建模mplayers
为List<Player>
or Player[]
。Player
为每个玩家建模数据的类在哪里mplayers
?
Firebase 对数组/列表的外观有非常严格的定义,而作为键的玩家名称不符合该定义。
您mplayers
在 JSON 中显示的内容将Map<String, Player>
在您的代码中转换为。
推荐阅读
- javascript - 如何在不使用缓存中的陈旧文件的情况下加载脚本 js?
- c# - WriteAllText 方法返回最后一行,而不是文件的整行
- asp.net - 将下拉列表中所选项目的名称打印到标签
- css - Firefox中的CSS变换旋转像素问题
- sql - 如何在 SQLite 中更新字段并将其设置为“b”?
- python - 反透视虚拟变量
- sql-server - AlwaysOn 辅助副本无法切换为主副本 SQL Server
- angular-material - 什么是放置取消按钮的 Angular Material 指南
- .net - 在另一个项目中添加 MVC 项目作为参考时出错
- python - Django 自动删除功能