Firebase的setValue()如何为Java中的对象工作?

caw*_*caw 5 java firebase

在Firebase关于列表的文档,有一个示例,您可以通过以下方式创建Java对象并将该对象写入Firebase引用setValue():

private static class MyObject {

    private String property1;
    private int property2;

    public MyObject(String value1, int value2) {
        this.property1 = value1;
        this.property2 = value2;
    }

    public String getFirstProperty() {
        return property1;
    }

}

private void populateList() {
    Firebase ref = new Firebase("https://MyDemo.firebaseIO-demo.com/myObjects");
    ref.push().setValue(new MyObject("myString", "7"));
}
Run Code Online (Sandbox Code Playgroud)

这是如何在内部工作的,即当您还没有编写toString()方法等时,究竟会将哪些值保存到Firebase参考中?更进一步,Firebase客户端是否能够从保存的值中恢复旧对象?怎么样?

是否需要有一个private static类,以便Firebase可以读取字段?

Chr*_*ung 6

文档解释了这是如何工作的:

将此位置的数据设置为给定值.此方法为该值接受的本机类型对应于JSON类型:

  • Boolean
  • Long
  • Double
  • Map<String, Object>
  • List<Object>

此外,您可以将自己的类的实例设置到此位置,前提是它们满足以下约束:

  1. 该类必须具有不带参数的默认构造函数
  2. 该类必须为要分配的属性定义公共getter.在反序列化实例时,没有公共getter的属性将设置为其默认值

因此,您必须为要保存的所有属性创建getter.在您的示例中,您的firstProperty属性将被写入,但由于您尚未定义默认构造函数,因此无法将其读回.