首页 > 解决方案 > Android Firebase Realtime:将具有嵌套对象的对象写入数据库

问题描述

是否可以将嵌套结构写入 firebase 实时数据库?

在我的情况下,我想将一个用户写入 DB,该用户引用了具有 String 属性的 Socks 对象。在数据库中,我需要一个名为“SocksCards”的孩子及其属性。使用此示例代码,socksCard 对象被忽略,用户数据被更新。

public void onDataChange(@NonNull DataSnapshot snapshot) {
                    User user = snapshot.getValue(User.class);                    
                    user.addSocksCards(socks);
                    userDb.setValue(user);
                }
public class User {
    public String username, surname, firstName, email, id, gender;
    private SocksCard socksCards;
    public User(){
    }

    public User(String username, String surname, String firstName, String email, String id, String gender){
        this.username = username;
        this.surname = surname;
        this.firstName = firstName;
        this.email = email;
        this.id = id;
        this.gender = gender;
    }

    public void addSocksCards(SocksCard sc){
        this.socksCards = sc;
    }
}
public class SocksCard {
    private String socksID;

    public SocksCard(String socksID){
        this.socksID = socksID;
    }

    public String getSocksID() {
        return socksID;
    }

}

标签: javaandroidfirebasefirebase-realtime-database

解决方案


Firebase在从/向数据库读取/写入 Java 对象时仅考虑公共字段、getter 和 setter。由于SocksCard socksCards是私有的,并且没有 getter 和/或 setter,因此该字段确实被忽略了。

两种最简单的方法是将字段标记为公共:

public SocksCard socksCards

,或为其添加公共吸气剂:

public SocksCard getSocksCards(){
    return this.socksCards;
}

推荐阅读