2017-12-31 127 views
1

Ich habe Probleme mit der Überprüfung, ob meine Sammlungen in der Firestore-Datenbank vorhanden sind. Wenn ich mit Firebase Realtime Datenbank arbeite ich verwendet haben könnte:Wie überprüft man, ob die Cloud Firestore-Sammlung existiert? (querysnapshot)

if(databaseSnapshot.exists) 

Jetzt mit Firestor ich das gleiche tun will. Ich habe bereits versucht,

if (documentSnapshots.size() < 0) 

aber es funktioniert nicht. Hier ist der aktuelle Code:

public void pullShopItemsFromDatabase() { 
    mShopItemsRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { 
     @Override 
     public void onComplete(@NonNull Task<QuerySnapshot> task) { 
      if (task.isSuccessful()) { 
       for (DocumentSnapshot document : task.getResult()) { 
        ShopItem shopItem = document.toObject(ShopItem.class); 
        shopItems.add(new ShopItem(shopItem.getImageUrl(), shopItem.getTitle(), shopItem.getSummary(), shopItem.getPowerLinkID(), shopItem.getlinkToShopItem(),shopItem.getLinkToFastPurchase(), shopItem.getKey(), shopItem.getPrice(),shopItem.getVideoID())); 
       } 
       if (shopItems != null) { 
        Collections.sort(shopItems); 
        initShopItemsRecyclerView(); 
       } 
      } else { 
       Log.w(TAG, "Error getting documents.", task.getException()); 
       setNothingToShow(); 
      } 
     } 
    }); 
} 

die Funktion: setNothingToShow(); Ist eigentlich was ich ausführen möchte, wenn meine Sammlung leer ist/nicht existiert. Bitte beraten! Danke, D.

+0

'if (documentSnaphots.size() <0)' wird nie wahr sein. Es sollte 'if (documentSnaphots.size() == 0)' oder 'if (documentSnaphots.size()> 0)' (je nachdem, wo Sie es setzen) sein. –

+0

@FrankvanPuffelen OK! Ich weiß nicht, was passiert ist, aber jetzt hat es funktioniert. Ich habe es vorher mit <= es hat nicht funktioniert, jetzt tut es. Danke vielmals! Aber dieser Fall funktioniert, während ich mit onSuccess arbeite. Ich habe vorher mit onComplete gearbeitet, weil ich eine "for" -Schleife machen möchte. Wie bei der ursprünglichen Post kann es auch mit onSuccess funktionieren? – WhiteNinja

+0

'onSuccess' wird ausgelöst, wenn die Aufgabe abgeschlossen und erfolgreich abgeschlossen wurde. Eine Task, die ohne das Laden von Daten abgeschlossen wird, weil sie keine Daten laden musste, war ebenfalls erfolgreich. So wird 'onSuccess' auch dort funktionieren. –

Antwort

2

exists() gilt für DocumentSnapshot, während Sie sich mit QuerySnapshot

Anruf task.result für QuerySnapshot aus Task<QuerySnapshot> bekommen.

Von diesem Anruf und iterieren durch jede der DocumentSnapshot Aufruf exists() auf ihnen.

+0

Danke dafür! Tatsächlich habe ich eine andere Methode gefunden, aber es hilft wirklich für zukünftige Bedürfnisse. – WhiteNinja

+0

@DaniyyelTouboul Wenn diese Antwort hilfreich war, sollten Sie sie aktualisieren. Sie sollten es nur akzeptieren, wenn es die von Ihnen gestellte Frage beantwortet hat, die es anscheinend nicht getan hat. –

+0

@FrankvanPuffelen leider kann ich noch nicht abstimmen. Mein Benutzer ist immer noch begrenzt. – WhiteNinja

Verwandte Themen