【问题标题】:Kotlin Firebase DeserializationKotlin Firebase 反序列化
【发布时间】:2016-09-19 02:07:52
【问题描述】:

我正在尝试使用 Kotlin 将 Firebase 中的数据反序列化为 POJO,这是我的 POJO 类:

class Message {
var number: String ?= null
var message: String? = null
var timestamp: Long = 0L
var isHandled: Boolean ?= false
var type:String ?=null
}

这是我从 Firebase 检索数据的代码

val query = Fire.REF.child("sms").orderByChild("type").equalTo("outbox-unsent")
    query.addChildEventListener(object : ChildEventListener {
        override fun onChildAdded(dataSnapshot: DataSnapshot, key: String) {
            val outbox = dataSnapshot.getValue(Message::class.java)
            Log.d("BS", "Background Service $outbox")
           }
//......
});

这是我在 Firebase 上的数据结构看起来像

"sms":{
"-KI3ar91oBXGNpXXrOCS" : {
"handled" : false,
"message" : "Pak kenapa koneksi...",
"number" : "+6285830166314",
"timestamp" : 1463587399000,
"type" : "inbox"
},
//.......//
}

当我执行代码时会引发错误:

java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter key

上面的代码我的错误在哪里?

【问题讨论】:

  • 我对 firebase 没有任何经验,但看起来 eventlistener 中的参数key 为空。能不能把onChildAdded的参数改成String?再试一次?
  • 我的错,是的,我跟踪了可能为空的第二个参数。谢谢
  • 解决了吗?有人可以发布一个可行的解决方案来结束这个问题吗?
  • 正如 Augusto 上面所说的,Kotlin 是空安全的,但在上述函数中,关键参数可能为空。所以代码应该像这样onChildAdded(dataSnapshot: DataSnapshot, key: String?)在关键参数后添加问号

标签: java firebase kotlin firebase-realtime-database


【解决方案1】:

正如 Augusto 上面所说,Kotlin 是 null 安全的,但在上述函数中,key 参数可能为 null。 所以代码应该是这样的

onChildAdded(dataSnapshot: DataSnapshot, key: String?)

在关键参数后添加问号

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多