android - HashMap 为空,因此我无法从 Firebase 数据库获取模拟器中显示的数据
问题描述
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()
解决方案
该data?.get(TIMESTAMP)
调用返回一个FirebaseTimestamp
对象。因此,不应将其转换为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
对象不能转换为任何类型,并且操作将导致崩溃。
推荐阅读
- javascript - 如何在对象构造函数中添加数组属性?
- python - 在 python NLTK 或其他包中将任何州、县、地区的名称或其缩写更改为国家/地区名称
- reactjs - 为 Azure ABP.IO React 移动应用设置环境变量
- java - 聊天应用程序:Java Socket 意外关闭
- c# - 我不断收到来自 Unity 3d 的神秘错误
- sql - 对地理空间数据进行排序
- openpyxl - 请问如何减少过多的“for”语法
- uwsgi - 如何确定 uwsgi 最大请求数?
- excel - 尝试在过滤范围上使用偏移功能
- python - Heroku 应用程序成功部署,但在加载站点时收到应用程序错误。但我似乎可以找到一个错误