使用一个类的多个限制器将数据存储在firebase中

时间:2018-06-18 16:53:43

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

我有一个班级User,其中包含nameagenationalityeyeColor 我有三个构造函数。

  1. Firebase所需的空构造函数,
  2. 用户(姓名,国籍),
  3. 用户(姓名,国籍,年龄,eyeColor)。
  4. 每当我尝试使用构造函数2在Firebase中保存数据时,我发现数据实际上是使用构造函数3保存的,其中ageeyeColor0null分别

    如何在不为构造函数3创建新类的情况下仅使用构造函数2的参数保存数据?

6 个答案:

答案 0 :(得分:2)

这是一个有趣的问题。我以前没有遇到过这种情况。但是,在阅读了documentation之后,

  

首先,创建对用户数据的数据库引用。然后使用set()/   setValue()用户将用户对象保存到数据库   用户名,全名和生日。你可以传递一个字符串,数字,   boolean,null,array或任何JSON对象。 传递null将删除   指定位置的数据。

我想建议像这样构建你的第二个构造函数。

public User(String name, String nationality) {
    this.name = name;  
    this.nationality = nationality;
    this.age = null;
    this.eyeColor = null;
}

我希望这不会将添加的信息保存在用户密钥中。如果有帮助,请告诉我!

答案 1 :(得分:1)

尝试添加一个将ageeyeColor设置为null的构造函数

User(name, nationality, age, eyeColor) {
    this(name, nationality); //age and eyeColor will have the default value - null
}

答案 2 :(得分:1)

0和null是整个JVM中所有对象的数字和对象成员的默认值。创建新对象时,如果您没有为成员分配值,则会获得默认值。如果您不想要默认值,请找到要分配的其他值。

答案 3 :(得分:0)

在Java中String默认值为nullint默认值为0。当您致电constructor时,所有属性都会获得initialize默认values。当您拨打第二constructor时,虽然您正在填写两个属性(姓名,国籍),但其他两个属性initialize为默认值。

因此,您应该在assign中保存(可能是条件)或constructor期望值时编写逻辑。

答案 4 :(得分:0)

您无法在数据库中根本不显示那些属性,因为在创建User类的对象时,这些字段将获得默认值0和{{1 }}。

如果要确保数据库中永远不会包含此类值,则可以使用null写入数据并仅填充所需的字段。

Map

因此,这将解决您的问题,但无需创建该类的对象。

答案 5 :(得分:0)

您不能选择将JavaBean对象的哪些属性添加到数据库中。 SDK始终会始终使用所有属性,而不管其值如何。它只会排除使用@Exclude注释其字段或访问器的属性。

如果要选择将哪些值放入数据库中,则必须构造一个Map并将这些值放入数据库中,并使用任何逻辑来决定哪些值合适。

换句话说,您不能简单地依靠JavaBean类型对象的构造函数来确定要从该对象中包含或排除哪些值。您必须编写特殊的代码才能做出这些决定。