【问题标题】:HashMap is null so i cant get my data shown in the emulator from Firebase databaseHashMap 为空,因此我无法从 Firebase 数据库获取模拟器中显示的数据
【发布时间】: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 请检查更新的答案,它将以更好的方式帮助您

标签: android firebase firebase-realtime-database kotlin


【解决方案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 我假设常量USERNAMETIMESTAMP 等已经定义。 OP 提到他定义了这些变量。
猜你喜欢
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 2020-10-10
  • 2020-03-19
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多