如何为 Firebase 数据库序列化我的 User 类并修复此错误?

Posted

技术标签:

【中文标题】如何为 Firebase 数据库序列化我的 User 类并修复此错误?【英文标题】:How can I serialize my User class for the Firebase Database and fix this error? 【发布时间】:2017-08-15 13:46:13 【问题描述】:

我正在尝试从 Firebase 数据库的 dataSnapshot 中检索更新的用户:

mRef.addValueEventListener(new ValueEventListener() 
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) 
            User atualizedUser = dataSnapshot.getValue(User.class);
            fName.setText(atualizedUser.getFirstName());
            lName.setText(atualizedUser.getLastName());
            profilePhoto.setProfileId(atualizedUser.getProfileId());
        

        @Override
        public void onCancelled(DatabaseError databaseError) 

        
    );

但我在下面收到此错误:

com.google.firebase.database.DatabaseException: Class bqs.bomqueso.Model.User is missing a constructor with no arguments
                                                            at com.google.android.gms.internal.zzbtg$zza.zze(Unknown Source)
                                                            at com.google.android.gms.internal.zzbtg$zza.zzaH(Unknown Source)
                                                            at com.google.android.gms.internal.zzbtg.zze(Unknown Source)
                                                            at com.google.android.gms.internal.zzbtg.zzb(Unknown Source)
                                                            at com.google.android.gms.internal.zzbtg.zza(Unknown Source)
                                                            at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
                                                            at bqs.bomqueso.Activities.MainActivity$3.onDataChange(MainActivity.java:92)
                                                            at com.google.android.gms.internal.zzbpx.zza(Unknown Source)
                                                            at com.google.android.gms.internal.zzbqx.zzZS(Unknown Source)
                                                            at com.google.android.gms.internal.zzbra$1.run(Unknown Source)
                                                            at android.os.Handler.handleCallback(Handler.java:746)
                                                            at android.os.Handler.dispatchMessage(Handler.java:95)
                                                            at android.os.Looper.loop(Looper.java:148)
                                                            at android.app.ActivityThread.main(ActivityThread.java:5443)
                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                            at     com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
                                                            at     com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

这是我的 User 类(这不是子类,我在单独的文件中创建它):

public class User 

private String firstName;
private String lastName;
private String profileId;

public User()  

    public User(String fName, String lName, String id) 
        this.firstName = fName;
        this.lastName = lName;
        this.profileId = id;
    

    public String getProfileId() 
        return profileId;
    

    public void setProfileId(String id)  
        this.profileId = id; 
    

    public String getLastName() 
        return lastName;
    

    public void setLastName(String lName)  
        this.lastName = lName; 
    

    public String getFirstName() 
        return firstName;
    

    public void setFirstName(String fName)  
        this.firstName = fName; 
    

我在这里找到了类似的问题,但我没有找到解决我的问题的方法,希望你们能帮助我,提前谢谢!

【问题讨论】:

User is missing a constructor with no arguments...这与您的代码不匹配...您确实有public User() 我不知道为什么会出现这个错误,因为正如你所说,我确实有一个没有参数的构造函数,有任何提示吗? 尝试清理并重建项目? 【参考方案1】:

对于 Kotlin,如果您将以下数据类用于 firebase,

data class UserModel(
        var userName: String,
        var userType: Int
)

然后你会得到类似的错误

com.google.firebase.database.DatabaseException:UserModel 没有 定义一个无参数的构造函数。如果您使用 ProGuard,请确保 这些构造函数不会被剥离。

因此,为此,您只需初始化其值

data class UserModel(
        var userName: String = "",
        var userType: Int = 0
)

【讨论】:

【参考方案2】:

创建一个没有参数的构造函数

public User() 作为板球提到并序列化

public class User implements Serializable 

private String firstName;
private String lastName;
private String profileId;

public User() 


public User(String fName, String lName, String id) 
    this.firstName = fName;
    this.lastName = lName;
    this.profileId = id;


public String getProfileId() 
    return profileId;


public void setProfileId(String id) 
    this.profileId = id;


public String getLastName() 
    return lastName;


public void setLastName(String lName) 
    this.lastName = lName;


public String getFirstName() 
    return firstName;


public void setFirstName(String fName) 
    this.firstName = fName;

如果这不符合要求,请记下

【讨论】:

你复制了无参数构造函数 现在我已经纠正了我的错误感谢您的反馈 那么这与问题中的代码有何不同? 如果'android.location.Address'是这个类中的一个属性类型,我不能改变这个类来实现零参数方法,我该怎么办?

以上是关于如何为 Firebase 数据库序列化我的 User 类并修复此错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何为firebase字段添加价值

如何为 ChatApp 制作 ListView 来管理所有聊天?

如何为每个用户提供 Firebase 存储中的特定文件夹

如何为 Firebase 实时数据库上的单个查询启用离线功能?

如何为 Firebase 项目配置动态链接?

如何为分析添加 Firebase 自定义事件?