Firestore如何命名从POJO设置的文档中的键?

时间:2018-04-10 10:37:25

标签: android firebase google-cloud-firestore

我想了解当我们从自定义Java对象设置文件时,Firestore如何为文档中的每个值命名。直觉上我认为它必须来自Java类中字段的名称,但事实并非如此。

相反,它似乎来自getter方法名称。这是对的吗?

String title = editTextTitle.getText().toString();
String description = editTextDescription.getText().toString();

Note note = new Note(title, description);

noteRef.set(note)

2 个答案:

答案 0 :(得分:1)

假设您的noteRef指向与此类似的文档参考:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
DocumentReference noteRef = rootRef.collection("notes").document();

Note类中的字段声明为:

private String title;
private String description;

使用以下代码行时:Note note = new Note(title, description);

您的数据库结构如下所示:

Firestore-root
    |
    --- notes (collection)
          |
          --- noteId (document) //Random document Id
               |
               --- title: "titleThatComesFromUserInput"
               |
               --- description: "descriptionThatComesFromUserInput"

文档的主要属性为titledescription(作为Note类中字段的名称),相应的值将是用户输入的确切文本在您的活动中的editTextTitleeditTextDescription次观看。

答案 1 :(得分:1)

Firestore遵循Java Bean属性命名约定,以便在Java对象和文档中的字段之间进行映射。

注意:这与Firebase实时数据库使用的逻辑相同。虽然您没有使用它,但了解这一点可能会更容易找到类似的示例。

以下是特定方法名称如何映射到属性名称(以及此字段名称)的一些示例:

public String getName(); // getter for property "name"
public void setName(String name); // setter for property "name"

public String getUserName(); // getter for property "userName"
public void setUserName(String name); // setter for property "userName"

public bool isAdmin(); // getter for property "admin"
public bool setAdmin(bool admin); // setter for property "admin"

使用getter和setter不是强制性的。在所有这些情况下,您也可以不使用getter / setter并使用 public 字段:

public String name;
public String userName;
public bool admin;

最后:它也不需要同时拥有getter和setter。如果你只有 一个getter,Firebase会直接设置相应的字段。但 要求您的字段名称遵循命名约定,以便Firebase可以找到要设置的正确字段。