You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何使用Firebase Realtime Database返回的HashMap数据

解决方法

方法1:安全类型强转为HashMap

你可以将Any?类型的datas安全强转为HashMap<String, Any?>类型,强转后即可正常调用get()方法读取字段:

val usersref = RTDBref.child("users")

usersref.get().addOnSuccessListener { datasnapshot ->
    // 安全强转,强转失败会返回null,避免类型转换崩溃
    val datas = datasnapshot.value as? HashMap<String, Any?>
    Log.i("datas", datas.toString())
    
    // 判空后调用get方法取值
    val id = datas?.get("Id")
    // 后续可对id做非空判断后再执行业务逻辑
}

如果你能100%确认返回的数据结构一定是HashMap格式,不会出现其他类型返回值,也可以用非安全强转as HashMap<String, Any?>,但不推荐该写法,强转失败会直接抛出类型转换异常导致应用崩溃。

方法2:使用Firebase内置对象映射方法

如果你的用户数据结构固定,更推荐先定义对应的数据类,直接通过Firebase的getValue方法映射成实体类,不需要手动解析HashMap,代码可读性和可维护性更高:

  1. 第一步定义对应的数据类
// 类内字段名要和Realtime Database里存储的字段名完全对应
data class User(
    val Id: String? = null,
    val uid: String? = null
)
  1. 第二步直接映射读取数据
val usersref = RTDBref.child("users")

usersref.get().addOnSuccessListener { datasnapshot ->
    val user = datasnapshot.getValue(User::class.java)
    val id = user?.Id
    val uid = user?.uid
}

内容的提问来源于stack exchange,提问作者sooyeon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:57:03