这是我的活动打开时调用的函数函数。
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())。
答案 0 :(得分:0)
您似乎正在使用等于start
的{{1}}来调用date
,这是null
的非法值。
最好的解决方案是找出whereGreaterThan
来自哪里并在那里阻止它。但更简单的替代方法是在获得null
时不设置查询:
null