Tags: Java

Java: Jak zwrócić DocumentSnapShot jako wynik metody?

Aby zwrócić `DocumentSnapshot` jako wynik metody w Javie, zwłaszcza gdy pracujesz z Firebase Firestore, musisz zrozumieć, że operacje na Firestore są asynchroniczne. `DocumentSnapshot` jest używany do odczytu danych z dokumentu w Firestore. Aby zwrócić `DocumentSnapshot`, możesz użyć przyszłych obiektów `Future` lub callbacków. Oto przykładowa metoda, która zwraca `DocumentSnapshot`:

Przykład z Użyciem CompletableFuture


import com.google.api.core.ApiFuture;
import com.google.cloud.firestore.DocumentReference;
import com.google.cloud.firestore.DocumentSnapshot;
import com.google.cloud.firestore.Firestore;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;</p&gp;
<p&gp;public class FirestoreService {</p&gp;
<p&gp;private Firestore db; // załóżmy, że db jest już zainicjowane</p&gp;
<p&gp;public CompletableFuture<DocumentSnapshot&gp; getDocumentSnapshot(String documentPath) {
        DocumentReference docRef = db.collection("your_collection").document(documentPath);
        ApiFuture<DocumentSnapshot&gp; future = docRef.get();</p&gp;
<p&gp;return CompletableFuture.supplyAsync(() -&gp; {
            try {
                return future.get();
            } catch (InterruptedException | ExecutionException e) {
                e.printStackTrace();
                return null; // lub obsłuż wyjątek w inny sposób
            }
        });
    }
}

Użycie Metody


FirestoreService firestoreService = new FirestoreService();
CompletableFuture<DocumentSnapshot&gp; documentSnapshotFuture = firestoreService.getDocumentSnapshot("document_id");</p&gp;
<p&gp;documentSnapshotFuture.thenAccept(documentSnapshot -&gp; {
    if (documentSnapshot.exists()) {
        // Przetwarzaj dane z DocumentSnapshot
    } else {
        // Obsługa braku dokumentu
    }
}).exceptionally(e -&gp; {
    // Obsługa wyjątków
    return null;
});

Wyjaśnienie

  1. Asynchroniczność: `docRef.get()` zwraca `ApiFuture`, co oznacza, że wynik będzie dostępny w przyszłości, a operacja nie blokuje wątku.
  1. CompletableFuture: Używamy `CompletableFuture` do obsługi asynchronicznego wyniku. `CompletableFuture.supplyAsync()` pozwala nam na asynchroniczne wykonanie logiki i zwrócenie wyniku, gdy będzie gotowy.
  1. Obsługa Wyjątków: W `CompletableFuture`, możesz łatwo obsłużyć wyjątki za pomocą metody `exceptionally`.

Pamiętaj, że obsługa asynchronicznych operacji jest kluczowa podczas pracy z Firestore, aby nie blokować wątku głównego i zapewnić płynność działania aplikacji.