2017-12-11 8 views
0

私のアクティビティが開いているときにこの関数が呼び出されます。ここで私は最大のタイムスタンプ文書をフェッチだし、その後、私は、パラメータ文書の日付とクエリを送信すると、「スタート」再び私の新しい関数を呼び出していてandroidプロジェクトのFireStoreで 'Invalid Query'が発生しました

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); 
       } 
      } 
     } 
    }); 
} 

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); 
      } 
     } 
    }); 
} 

この関数の最初の行に、my appがクラッシュします。

ログの猫エラー

java.lang.IllegalArgumentExceptionが:無効なクエリ。 nullでは(whereEqualTo()を使用して)等価比較のみを実行できます。

答えて

0

あなたがwhereGreaterThanのために不正な値であるnullに等しいdate、とstartを呼んでいるようです。

最も良い解決策は、nullがどこから来ているのかを突き止めてそこから防ぐことです。しかし、単純な代替は、あなたがnullを取得するときにクエリを設定していないことであろう。

private void start(Date date, Query query) { 
    if (date != null) { 
    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); 
      } 
     } 
    }); 
    } 
} 
+0

はい、あなたは正しいです、私は日付オブジェクトを参照してください日付がnull.Only日付で、なぜ私にはわからないnull.Butですオブジェクトは@フランクが足りない –

関連する問題