【问题标题】:Save class to firebase将课程保存到 Firebase
【发布时间】:2018-01-06 16:43:29
【问题描述】:

我的班级是 CredicardinfoObject.class

public class CreditcardinfoOjbect implements Serializable {
    private static final long serialVersionUID = 1L;

    public static String title;
    public static String startTime;
    public static String endTime;
    public static String day;

}

这个类只有静态属性。不需要实例化。

在我的 ma​​inActivity.class 中,我想设置类的值,然后存储这个 firebase 数据库。这是我的 ma​​inActivity.class

    CreditcardinfoOjbect.title = "foo";
    CreditcardinfoOjbect.startTime = "bar";
    CreditcardinfoOjbect.day = "1";
    CreditcardinfoOjbect.endTime = "2";

    final FirebaseDatabase database = FirebaseDatabase.getInstance();
    String uid = "";
    FirebaseAuth auth = FirebaseAuth.getInstance();
    FirebaseUser user = auth.getCurrentUser();
    if (user != null) {
        uid = user.getUid();
    }
    DatabaseReference ref = database.getReference("users").child(uid).child("account").child("creditcards");

    HashMap<String, Class<CreditcardinfoOjbect>> hashMap = new HashMap<>();
    hashMap.put("card", CreditcardinfoOjbect.class);
    ref.setValue("card",hashMap );

很遗憾,这不起作用。如何在 Firebase 中存储类的当前值?

【问题讨论】:

  • 尝试将 pojo 类数据放入不同的变量中,然后将其添加到 firebase。从 Firebase 检索数据时,再次创建 pojo 类
  • 我猜你需要 Setter 和 Getter
  • 在下面查看我的答案。如果它不起作用,请告诉我

标签: java android firebase firebase-realtime-database firebase-authentication


【解决方案1】:

首先,您需要向 POJO 类添加 Firebase 所需的无参数构造函数以及每个字段的公共 setter 和公共 getter,如下所示:

public class CreditCardInfoObject implements Serializable {
    private String title;
    privat eString startTime;
    private String endTime;
    private String day;

    public CreditCardInfoObject() {}

    public String getTitle() {return title;}
    public void setTitle(String title) {this.title = title;}

    public String getStartTime() {return startTime;}
    public void setStartTime(String startTime) {this.startTime = startTime;}

    public String getEndTime() {return endTime;}
    public void setEndTime(String endTime) {this.endTime = endTime;}

    public String getDay() {return day;}
    public void setDay(String day) {this.day = day;}
}

请注意,您不需要静态字段。另请注意,i set all your fields as private。在这种情况下,不需要 setter 和 getter。

现在,要设置 POJO 类的值,您需要创建 CreditCardInfoObject 类的新实例并使用公共设置器。有了这个新对象,您可以像这样将其保存到 Firebase 实时数据库:

CreditcardinfoOjbect obj = new CreditcardinfoOjbect();
obj.setTitle("foo");
obj.setStartTime("bar");
obj.setEndTime("1");
obj.setDay("2");

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
String uid = "";
FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();
if (user != null) {
    uid = user.getUid();
}
DatabaseReference ref = rootRef.child("users").child(uid).child("account").child("creditcards");
ref.setValue(obj);

【讨论】:

  • 我觉得奇怪的是,谷歌没有提到将对象直接添加到数据库中。在示例中,他们总是创建Map&lt;String, Object&gt; 并将对象映射为一个对象,然后再将其传递给setValue()。传递对象要简单得多。感谢这个例子:)
  • @W0lfw00ds 不客气!如果您认为我的回答有帮助,请考虑投赞成票。谢谢!
【解决方案2】:

尝试在 CreditCardInfoObject 类中更改您的代码

public class CreditCardInfoObject implements Serializable {

    public String title;
    public String startTime;
    public String endTime;
    public String day;

    public CreditCardInfoObject() {
    }

    public CreditCardInfoObject(String title, String startTime, String endTime, String day) {
        this.title = title;
        this.startTime = startTime;
        this.endTime = endTime;
        this.day = day;
    }

    @Exclude
    public Map<String, Object> toMap() {
        HashMap<String, Object> result = new HashMap<>();
        result.put("title", title);
        result.put("startTime", startTime);
        result.put("endTime", endTime);
        result.put("day", day);

        return result;
    }

}

MainActivity 中更改您的代码,如下所示

String title = "foo";
String startTime = "bar";
String endTime = "1";
String day = "2";

final FirebaseDatabase database = FirebaseDatabase.getInstance();
String uid = "";
FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();
if (user != null) {
    uid = user.getUid();
}

final Map<String, Object> dataMap = new HashMap<String, Object>();
CreditCardInfoObject creditCardInfoObject = new CreditCardInfoObject(title,startTime,endTime,day);

DatabaseReference ref = database.getReference("users").child(uid).child("account");
dataMap.put("creditcards", creditCardInfoObject.toMap());
ref.updateChildren(dataMap);

欲了解更多信息:Firebase Documentation

希望它成功了。有什么问题都可以问我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-02
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多