【问题标题】:Firebase RealtimeDatabase retrieve snapshot object exceptionFirebase 实时数据库检索快照对象异常
【发布时间】:2021-03-09 18:01:46
【问题描述】:

这是我的模型类

    @Parcel
data class ClientModel(
    var name: String? = "",
    var phone: String? = "",
    var princpalAddresse: String? = "",
    var homeAddresse: String? = "",
    var travailleAddresse: String? = "",
    var email: String? = "",
    var userToken: String? = "",
    var principalAddresseCoords: Pair<Double, Double>? = null,
    var homeAddresseCoords: Pair<Double, Double>?= null,
    var workAddresseCoords: Pair<Double, Double>? = null,
)

我的 proGuard 文件保留类:

 -keep class com.olivier.oplivre.models.ClientModel

但是!当我尝试使用 singleValueEventListener 获取快照时,由于 Pair 变量

而出现异常
   val utilisationInfo =  snapshot.getValue(ClientModel::class.java) //todo CRASH

例外:

com.google.firebase.database.DatabaseException: Class kotlin.Pair does not define a no-argument constructor. If you are using ProGuard, make sure these constructors are not stripped.

数据库结构:

【问题讨论】:

    标签: android firebase kotlin firebase-realtime-database


    【解决方案1】:

    我认为 firebase 实时数据库将您的 principalAddresseCoords 视为 long 列表,因此在您的 ClientModel 中更改 principalAddresseCoords 到 emptyList() 和类型 List

    【讨论】:

      【解决方案2】:

      正如@Sami Shorman 所说,firebase 将我的 Pair 实例转换为列表,而不是作为 Hashmap,> !所以我改变了我的班级模型:

      var principalAddresseCoords: HashMap<String,Double>? = null,
      var homeAddresseCoords: HashMap<String,Double >? = null,
      var workAddresseCoords: HashMap<String,Double >? = null,
      

      要将数据作为 Hashmap 我只需要这样做:

      clientModel.workAddresseCoords =  HashMap<String,Double>().apply {
                          put("lat",lat)
                          put("long",long)
                      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-21
        • 2019-06-15
        • 2021-01-21
        • 2017-10-06
        • 2018-01-17
        • 2021-03-26
        • 2021-06-07
        相关资源
        最近更新 更多