【发布时间】:2018-02-25 19:43:39
【问题描述】:
我正在尝试通过在 Cloud Firestore 中存储一个代表最小 Epoch 的值来创建动态查询。我们称这个值为“filter_value”:
我通过从.onStart() 调用成功读取了这个值,
mStoreBaseRef.collection("epoch_filter").addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(QuerySnapshot querySnapshot, FirebaseFirestoreException e) {
for (DocumentSnapshot z : querySnapshot){
Epoch epoch = z.toObject(Epoch.class);
filterEpochValue = (long) epoch.getFilter_value();
Log.v("X_VALUE", filterEpochValue.toString());
}
}
});
我已记录该值并确认已成功读取。
然后我有一个投票集合,每个投票都有一个时代。我想使用上面的 filter 变量根据它们各自的 Epoch 对这些民意调查执行查询,这样我只能查看大于我的“filter_value”的民意调查。
我正在使用以下查询:
Query queryStore = FirebaseFirestore.getInstance()
.collection("Polls")
.whereGreaterThan("epoch", filterEpochValue)
.orderBy("vote_count");
FirestoreRecyclerOptions<Poll> storeOptions = new FirestoreRecyclerOptions.Builder<Poll>()
.setQuery(queryStore, Poll.class)
.build();
并收到以下信息:
java.lang.IllegalArgumentException: Invalid Query. You can only perform equality comparisons on null (via whereEqualTo()).
at com.google.android.gms.internal.zzenx.zza(Unknown Source)
at com.google.firebase.firestore.Query.zza(Unknown Source)
at com.google.firebase.firestore.Query.whereGreaterThan(Unknown Source)
at com.troychuinard.fanpolls.Fragment.TrendingFragment.onStart(TrendingFragment.java:181)
at android.support.v4.app.Fragment.performStart(Fragment.java:2287)
【问题讨论】:
-
filterEpochValue的数据类型是什么?在构建查询之前立即记录它的价值是什么? -
记录为75000
-
至于类型,我必须检查一下,但我将其转换为 Long 以希望与每个投票中存储的内容进行比较。不确定 Firebase 添加后如何呈现。
-
为了清楚起见,我要求的不是您在 Firestore 回调中显示的日志值,而是在您开始构建查询之前。我怀疑它是空的。
-
刚查了一下,确实是null。试图找出原因,因为它在 .addSnapShotListener() 中不为空
标签: java android firebase google-cloud-firestore