在我的Android应用程序中,我有一个POI类,其中包含以下属性和构造函数:
/**
* A POJO class for a POI (Point Of Interest)
*/
@Parcel
public class POI {
String id;
String name;
int release;
Double latitude;
Double longitude;
String description;
String img_url;
String collection;
int collectionPosition;
String stampText;
boolean stampChecked; // Has the POI been checked to be stamped?
Stamp stamp;
public POI(){}
public POI(String id){
this.id = id;}
public POI(String id,
String name,
int release,
Double latitude,
Double longitude,
String description,
String img_url,
String collection,
int collectionPosition,
String stampText) {
this.id = id;
this.name = name;
this.release = release;
this.latitude = latitude;
this.longitude = longitude;
this.description = description;
this.img_url = img_url;
this.collection = collection;
this.collectionPosition = collectionPosition;
this.stampText = stampText;
this.stampChecked = false;
}
当我在Firestore中存储POI对象时,我发现了两个问题。
Firestore创建了一个标记属性,显然是因为我的POI类中有一个标记属性。我的POI模型有一个Stamp属性,因为我只需要它来代码。我不需要它存储在数据库中。有没有办法,比如我可以用来告诉Firestore它可以忽略哪些字段的注释?
即使我的POI类中没有任何此类属性,Firestore也会创建一个名为“stamped”的属性。我猜这种情况的唯一原因是因为我班上有以下方法:
public boolean isStamped(){
return (stamp instanceof Stamp);
}
有没有办法让Firebase忽略某些属性或强制Firebase使用特定的构造函数,而无需删除或重命名我的getter和setter 。
答案 0 :(得分:2)
您可以在字段或方法上使用Exclude注释,以防止序列化。
在下面的课程中," bar"序列化时不会显示属性,因为getter使用@Exclude进行注释。
z x y
1: b 1.0531555 2.121852
2: a 0.3631284 -1.388861
3: c 4.0566838 -2.367558
答案 1 :(得分:0)
是的。与Firebase实时数据库(根本不显示不存在的值)不同,如果添加null
字段,则在Cloud Firestore中,结果将为yourField: null
。如果您想确保在涉及对象时没有null
值,或者在字符串时出现空字符串""
,那么在将文档写入Firestore时,您可以使用Map
并仅使用您想要的字段填充它。
HashMap<String, Object> map = new HashMap<>();
if (stampChecked != null) {
map.put("stampChecked", true);
}
//Same for the other properties.
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
rootRef.collection("yourCollection").document("yourDocument").set(map);
如果您的数据库中已有此类值,则可以使用以下代码行将其删除:
Map<String, Object> map = new HashMap<>();
map.put("yourField", FieldValue.delete());
yourRef.update(map);