android项目中FireStore中的“无效查询”

时间:2017-12-11 14:38:57

标签: android firebase google-cloud-firestore

这是我的活动打开时调用的函数函数。

public void startListening() {
    final Query query = collectionReference;
    listenerRegistration = query.orderBy("timestamp", Query.Direction.DESCENDING).limit(1).addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {
            if (e != null)
                return;
            List<DocumentChange> documentChanges = documentSnapshots.getDocumentChanges();
            if (documentSnapshots.getMetadata().isFromCache())
                return;
            for (DocumentChange documentChange : documentChanges) {
                if (documentChange.getType() == DocumentChange.Type.ADDED) {
                    start(documentChange.getDocument().getDate("timestamp"), query);
                }
            }
        }
    });
}

在这里,我正在获取最大时间戳文档,然后我再次调用我的新函数“start”并发送参数文档日期和查询。

  private void start(Date date, Query query) {
    query.whereGreaterThan("timestamp", date).addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {
            if (e != null)
                return;
            List<DocumentChange> documentChanges = documentSnapshots.getDocumentChanges();
            for (DocumentChange documentChange : documentChanges) {
                if (documentChange.getType() == DocumentChange.Type.ADDED)
                    fireStoreDocumentListener.onDocumentAdded(documentChange);
            }
        }
    });
}

在此功能的第一行,我的应用程序崩溃。

记录猫错误

  

java.lang.IllegalArgumentException:无效的查询。   您只能对null执行相等比较(通过whereEqualTo())。

1 个答案:

答案 0 :(得分:0)

您似乎正在使用等于start的{​​{1}}来调用date,这是null的非法值。

最好的解决方案是找出whereGreaterThan来自哪里并在那里阻止它。但更简单的替代方法是在获得null时不设置查询:

null