无法从firebase接收的数据快照中提取信息。
目前,我可以从firebase获取dataSnapshot,但从中提取信息时遇到问题。
在下面的例子中,我有一个代码为“81MUB”的大厅,在大厅里有一个玩家列表(在这个例子中只使用了一个玩家)。Data from FireBase
{
"81MUB": [
{
"name": "Alejandro",
"points": 0
}
]
}
data class Player(
val name: String,
val points: Int
)
fun getCode(): String {
val index = ('A'..'Z') + ('1'..'9')
var code = ""
for (i in 0..4){
code += index[Random().nextInt(index.size)]
}
return code
}
class MviewModel : ViewModel() {
private val _Players: MutableLiveData<MutableList<Player>> =
MutableLiveData(mutableListOf<Player>(Player("Alejandro", 0)))
private var _LobbyCode: String = ""
private val dataBase = FirebaseDatabase.getInstance()
fun getPlayer(): MutableLiveData<MutableList<Player>> = _Players
fun createLobby() {
_LobbyCode = getCode()
}
fun listener() {
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
}
override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
}
}
dataBase.reference.child(_LobbyCode).addValueEventListener(postListener)
}
}
有什么建议吗?
1条答案
按热度按时间bvhaajcl1#
每次调用
getCode()
都会生成一个新的随机码,阅读数据时,总是使用数据库中存在的完全相同的代码,因此在代码中,应该如下所示:logcat中的结果为:
但是,如果要将
81MUB
节点Map到Player
类型的对象,则数据类应如下所示:在代码中:
这将产生与上面完全相同的输出。
您还可以考虑使用DatabaseReference#push()方法,该方法:
创建对自动生成的子位置的引用。子键是在客户端生成的,并包含服务器时间的估计值以用于排序。
而不是用你的密码。