HashMap 为空,因此我无法从 Firebase 数据库获取模拟器中显示的数据
Posted
技术标签:
【中文标题】HashMap 为空,因此我无法从 Firebase 数据库获取模拟器中显示的数据【英文标题】:HashMap is null so i cant get my data shown in the emulator from Firebase database 【发布时间】:2019-12-26 13:05:54 【问题描述】:android studio
显示警告,因此使用ALT + ENTER
代码
val name = data[USERNAME] as String
成为
val name = data?.get(USERNAME) as String
但我的模拟器仍然崩溃
thoughtsCollectionRef.get()
.addOnSuccessListener snapshot ->
for(document in snapshot.documents)
val data = document.data
//this is my code after listening to android studio
val name = data?.get(USERNAME) as String
val timestamp = data?.get(TIMESTAMP) as Date
val thoughtTxt = data?.get(THOUGHT_TXT) as String
val numLikes = data?.get(NUM_LIKES) as Long
val numComments = data?.get(NUM_COMMENTS) as Long
val documentId = document.id
//我用safecall ?.get()
编辑了所有其他变量,但它仍然崩溃
val newThought = Thought(name,timestamp,thoughtTxt,numLikes.toInt(),numComments.toInt(),
documentId)
thoughts.add(newThought)
thoughtsAdapter.notifyDataSetChanged()
【问题讨论】:
LogCat 中的错误/异常是什么? 请发布您的数据库截图和poko以便更好地理解。 08-21 09:49:28.578 4088-4088/com.example.rndm E/AndroidRuntime:致命异常:主进程:com.example.rndm,PID:4088 java.lang.ClassCastException: com.google.firebase.Timestamp 无法在 com.example.rndm.MainActivity$onCreate$2.onSuccess( MainActivity.kt:16)在 com.google.android.gms.tasks.zzn.run(未知来源)val timestamp = data?.get(TIMESTAMP) as Date
这个字段不是日期而是时间戳
@TodorGeorgiev 请检查更新的答案,它将以更好的方式帮助您
【参考方案1】:
data?.get(TIMESTAMP)
调用返回一个Firebase Timestamp
对象。因此,与其将其转换为 Date
,不如将其转换为 com.google.firebase.Timestamp
:
// imports
import com.google.firebase.Timestamp
...
// rest of the code
val timestamp = data?.get(TIMESTAMP) as? Timestamp
如果你想最终得到一个Date
对象,你可以使用Timestamp
方法toDate()
:
val date = timestamp?.toDate()
另请注意,在这种情况下,您应该使用安全转换运算符 as?
而不是 as
:
val name = data?.get(USERNAME) as? String
val timestamp = data?.get(TIMESTAMP) as? Timestamp
val thoughtTxt = data?.get(THOUGHT_TXT) as? String
val numLikes = data?.get(NUM_LIKES) as? Long
val numComments = data?.get(NUM_COMMENTS) as? Long
data?.get(KEY)
可能会产生一个null
对象,该对象不能转换为任何类型,操作会导致崩溃。
【讨论】:
我尝试过的类似方式,它说未解决的参考USERNAME
@Ashish 我假设常量USERNAME
、TIMESTAMP
等已经定义。 OP 提到他定义了这些变量。以上是关于HashMap 为空,因此我无法从 Firebase 数据库获取模拟器中显示的数据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JSTL forEach 循环检索 HashMap [重复]
mybatis 的 foreach 使用hashmap 传输 List ,hashmap中的List 不空,List中的元素为空,为啥呢。
无法从 firebase 回收器视图中的 firebase 实时数据库中获取嵌套数据