使用云firestore,您可以使用document.toObject(YourClass.class);
将文档转换为对象,其中类的变量与数据库中的变量匹配。但是,如果数据库中的某个变量是引用,那么您将在java类中使用哪种数据类型?请注意,我不仅要将其存储在我的数据模型中,还要检索它并使用表单的覆盖方法进行设置:
protected MyDataModel(Parcel in) {
mString = in.readString();
}
和
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(mString);
}
如果我使用DocumentReference,那么在writeToParcel()中,我该如何编写它?另外,我如何在受保护的Parcel in
构造函数中阅读它?我尝试了writeSerializable()
和readSerializable()
,但DocumentReference
未实现Serializable
。
答案 0 :(得分:2)
我还没有使用过Java API,但我想你会想要使用DocumentReference类型。以下是firebase文档中的一些链接:
DocumentReference
CollectionReference
getDocumentReference
答案 1 :(得分:2)
如果需要序列化DocumentReference,请使用其getPath()方法来获取描述文档在数据库中位置的字符串。要将路径字符串反序列化回DocumentReference,请使用FirebaseFirestore.getInstance().document(path)。
当您要进行这样的转换时,有时自己编写所有代码比使用Firestore SDK提供的内置对象序列化更为方便。
答案 2 :(得分:0)
我在document.toObject(YourClass.class);
上遇到了同样的问题
我有一个Event
类,该类包含id
(文档ID)和对另一个集合subCategoryReference
的引用。
我在Event
上创建了简单转换器
例如:
val event = document
.toObject(Event::class.java)
.withId<Event>(document.id)
.withReference<Event>((document.data["subCategoryReference"] as DocumentReference).path)
在您所猜测的Event类中,我有两个函数withId
和withReference
看起来像这样:
fun <T : Event?> withId(id: String): T {
this.id = id
return this as T
}
fun <T : Event?> withReference(reference: String): T {
this.subCategoryRef = reference
return this as T
}
您的类变量的名称必须与Firestore变量/字段的名称不同(只是您要在其上应用转换器的变量)-参见下图
在我的Firestore上,引用字段(变量)称为subCategoryReference
,在Event
类中,变量名称为subCategoryRef
。
让我知道你是否没有得到我。
希望对您有帮助...