我想了解当我们从自定义Java对象设置文件时,Firestore如何为文档中的每个值命名。直觉上我认为它必须来自Java类中字段的名称,但事实并非如此。
相反,它似乎来自getter方法名称。这是对的吗?
String title = editTextTitle.getText().toString();
String description = editTextDescription.getText().toString();
Note note = new Note(title, description);
noteRef.set(note)
答案 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"
文档的主要属性为title
和description
(作为Note
类中字段的名称),相应的值将是用户输入的确切文本在您的活动中的editTextTitle
和editTextDescription
次观看。
答案 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可以找到要设置的正确字段。