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,代码可读性和可维护性更高:
- 第一步定义对应的数据类
// 类内字段名要和Realtime Database里存储的字段名完全对应 data class User( val Id: String? = null, val uid: String? = null )
- 第二步直接映射读取数据
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
相关产品推荐
相关产品推荐

