【问题标题】:Android Kotlin firebase.database.DatabaseException: No properties to serialize found on classAndroid Kotlin firebase.database.DatabaseException:在类上找不到要序列化的属性
【发布时间】:2018-08-01 08:44:48
【问题描述】:

我已遵循其他 SO 解决方案的建议: 1. 使我的课程可序列化 2.有一个Firebase的默认构造函数 3.更新我的proguard规则(不确定这个)

我仍然收到上述错误,有什么想法吗?

package org.sherman.android.stub_firebase.Models

import java.io.Serializable

/**
 * Created by fyi2 on 2/21/18.
 */
class User(displayName:String, email:String, photoUrl:String, userId:String) : Serializable {
    constructor(): this("","","","")



}

新的类定义:

class User :Serializable {
    private var displayName:String=""
    private var email:String=""
    private  var photoUrl:String=""
    private var userId:String=""

    constructor() {}

    constructor(displayName: String, email: String, photoUrl: String, userId: String) {
        this.displayName = displayName
        this.email = email
        this.photoUrl = photoUrl
        this.userId = userId
    }

}

Proguard 规则:

-keepclassmembers class org.sherman.android.stub_firebase.Models.** { *; }

调用它的代码:

fun registerUserToFirebase(email:String, password:String){
    mAuth?.createUserWithEmailAndPassword(email, password)?.addOnCompleteListener(this){ task ->
        if (task.isSuccessful){
            mProgressDialog?.dismiss()
            var currentUserFB = task.getResult().user as FirebaseUser
            var user = User("Bobby", currentUserFB!!.email!!, "", currentUserFB!!.uid)
            mUsersDB!!.child(currentUserFB.uid).setValue(user)
            val intent = Intent(this, MainActivity::class.java)
            startActivity(intent)
            finish()
        } else {
            Helper.showAlertDialog("Error!",task.exception?.message!!,this)

        }
    }
}

错误日志sn-p:

com.google.firebase.database.DatabaseException: No properties to serialize found on class org.sherman.android.stub_firebase.Models.User
                                                                                       at com.google.android.gms.internal.zzelx.<init>(Unknown Source:799)
                                                                                       at com.google.android.gms.internal.zzelw.zzf(Unknown Source:12)
                                                                                       at com.google.android.gms.internal.zzelw.zzbx(Unknown Source:259)
                                                                                       at com.google.android.gms.internal.zzelw.zzbw(Unknown Source:0)
                                                                                       at com.google.firebase.database.DatabaseReference.zza(Unknown Source:10)
                                                                                       at com.google.firebase.database.DatabaseReference.setValue(Unknown Source:7)
                                                                                       at org.sherman.android.stub_firebase.Activities.RegisterActivity$registerUserToFirebase$1.onComplete(RegisterActivity.kt:59)

【问题讨论】:

    标签: android firebase firebase-realtime-database kotlin


    【解决方案1】:

    已解决,即使在 Kotlin 中,变量似乎也必须明确公开。

    import java.io.Serializable
    
    /**
     * Created by fyi2 on 2/21/18.
     */
    class User :Serializable {
        public var displayName:String=""
        public var email:String=""
        public  var photoUrl:String=""
        public var userId:String=""
    
        constructor() {}
    
        constructor(displayName: String, email: String, photoUrl: String, userId: String) {
            this.displayName = displayName
            this.email = email
            this.photoUrl = photoUrl
            this.userId = userId
        }
    
    }
    

    修改后,其余部分照常工作。

    【讨论】:

      【解决方案2】:

      如果您在发布 apk 时遇到问题,那么 在你的 proguard 文件中这样做

          -keepattributes Signature
      
          -keepclassmembers class com.yourcompany.models.** {
            *;
          }
      

      【讨论】:

        【解决方案3】:

        您可以轻松使用数据类,它已经带有一个空的构造函数等。

        @IgnoreExtraProperties
        data class User(
            var displayName: String? = null,
            var email: String? = null,
            var photoUrl : String? = null,
            var userId: String? = null
        )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-17
          • 2016-10-11
          • 2018-02-25
          • 2017-04-03
          • 2018-03-08
          • 1970-01-01
          • 2019-07-17
          相关资源
          最近更新 更多