我有以下Firestore结构:
我设法使用Kotlin对其进行反序列化,但仅使用Any
作为城市和活动的类型。到目前为止,这是我的数据类:
@IgnoreExtraProperties
data class User (
var firstName: String,
var lastName: String,
var displayName: String,
var birthday: Date,
var memberSince: Date,
var city: Any,
var activities: ArrayList<Any>
) {
constructor():this("", "", "", Date(), Date(), Any(), ArrayList(0))
}
以下是我检索数据和反序列化的方法:
DocumentReference userRef = mFirestoreDB.collection("user").document(mFirebaseUser.getUid());
userRef.addSnapshotListener(this, new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(DocumentSnapshot documentSnapshot, FirebaseFirestoreException e) {
if (documentSnapshot.exists()) {
final User user = documentSnapshot.toObject(User.class);
Log.i(TAG, user.toString());
} else if(e != null) {
Log.e(TAG, "Error retrieving user data from Firestore", e);
}
}
});
我想知道,我是否可以强烈地将城市和活动打造为DocumentReference
,应该如此?
答案 0 :(得分:0)
我想我发现了如何做到这一点。所以你需要做的就是使用这个awsome声明:lateinit,正如文档所说:
通常,声明为非null类型的属性必须是 在构造函数中初始化。然而,通常情况并非如此 方便。例如,可以通过初始化属性 依赖注入,或单元测试的设置方法。在这 case,您不能在构造函数中提供非null初始值设定项,但是 您仍然希望在引用属性时避免空检查 在一个班级的体内。
我的数据类现在看起来像:
@IgnoreExtraProperties
data class User2 (
var firstName: String,
var lastName: String,
var displayName: String,
var birthday: Date,
var memberSince: Date,
var activities: ArrayList<DocumentReference>
) {
lateinit var city: DocumentReference
constructor():this("", "", "", Date(), Date(), ArrayList(0))
}
自我注意:我真的需要阅读更多关于Kotlin ......