如何查询Firebase Firestore引用数据类型?

我正在使用Firestore 引用数据类型来存储对用户的引用,如下面的屏幕截图所示

用户参考

在这里输入图像描述

用户集合

在这里输入图像描述

当我试图查询这些数据时,我得到了一个ClassCastException (我试图将其转换为一个String )。

 //.. this function reads data from DocumentSnapshot //.. and converts to an Organization private fun DocumentSnapshot.toOrganization(): Organization { //.. some code (this.data["members"] as ArrayList<HashMap<String, Any>>).map { toOrgMember(it) }) //.. more code } fun toOrgMember(map: Map<String, Any>): OrgMember { //map["user"] as String throws ClassCastException. Refer first screenshot return OrgMember(map["id"] as Long, UserRef(map["user"] as String), map["type"] as String, asJobTitlesList(map["jobTitles"] as String)) } 

堆栈跟踪

 10-14 20:31:17.503 15569-15569/com.ab W/System.err: Caused by: java.lang.ClassCastException: com.google.android.gms.internal.zzegf cannot be cast to java.lang.String 10-14 20:31:17.504 15569-15569/com.ab W/System.err: at feature.model.core.CoreUtilsKt.toOrgMember(CoreUtils.kt:28) 10-14 20:31:17.504 15569-15569/com.ab W/System.err: at feature.model.organization.OrgRemoteKt.toOrganization(OrgRemote.kt:55) 

我应该投什么类的参考数据类型? ( com.google.android.gms.internal.zzegf看起来像一个不应该使用的内部类)

截至目前,我没有在文档中找到任何参考类型的例子。 任何帮助,将不胜感激。

Firestore从您的集合中获取引用时返回一个DocumentReference。 如果将转换为DocumentReference不起作用,请跟踪此问题 。

我遭受同样的问题。 不过,我可以使用以下方法解决此问

 DocumentReference docRef = firestore.document(map.get("reference_field").toString()); 

我不确定这是否正确,但这种方式对我有效。

我们将需要看到你的一些代码给你一个答案。 但在此期间,这是我的查询片段看起来像,假设你正在寻找一些独特的东西,如果不是你可以循环的结果。

 FireBaseFirestore db = FirebaseFirestore.getInstance(); collectionRef = db.collection("yourCollection"); Query query = collectionRef.whereEqualTo("Field", "yourQuery" ); query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { @Override public void onComplete(@NonNull Task<QuerySnapshot> task) { if(task.isSuccessful()) { QuerySnapshot qSnap = task.getResult(); if (!qSnap.isEmpty()) { Log.d("Query Data", String.valueOf(task.getResult().getDocuments().get(0).getData())); } else { Log.d("Query Data", "Data is not valid"); } } } });