簡體   English   中英

使用服務器的雲 Firestore

[英]cloud firestore using server

我正在使用 Cloud Firestore 作為 android 項目的數據庫。 我正在應用程序中編寫所有的 crud 操作,這使得它非常慢並且代碼很大。 我想將所有代碼轉移到服務器並使用該應用程序僅進行 API 次調用。

例如,

public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
    List<String> usersf = new ArrayList<>();

    for (DocumentSnapshot doc : queryDocumentSnapshots) {
        usersf.add(doc.getId());

    }

    fi.onFollowingRetrieved(usersf);
}

在這里,我在我的應用程序中編寫了這段代碼,它為我提供了一個用戶 ID 列表。 我想在我的應用程序中寫一個 api,它從服務器獲取這個列表,而不是自己完成工作。

我該如何實施?

我的意思是我不想在我的應用程序中運行循環,而是在服務器上運行,並希望服務器只向我發送列表。

在那種情況下,您應該將 map QuerySnapshot object 直接放入自定義對象的 List 中。 假設您有一個與此類似的 class:

public class User {
    public String uid;
    public String name;
    public String email;

    public User() {}

    User(String uid, String name, String email) {
        this.uid = uid;
        this.name = name;
        this.email = email;
    }
}

去掉for循環,直接獲取列表,請使用如下幾行代碼:

public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
    fi.onFollowingRetrieved(queryDocumentSnapshots.toObjects(User.class));
}

看,我使用了 QuerySnapshot# toObjects(@NonNull Class clazz)其中:

返回 QuerySnapshot 中文檔的內容,轉換為提供的 class,作為列表。

還要注意,查詢返回的文檔越多,閱讀時間就越長。 除了限制結果之外,沒有任何破解方法。

如果您只想要文檔 ID,然后假設文檔 ID 由 UID 表示,那么您應該簡單地使用以下代碼:

public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
    List<User> users = queryDocumentSnapshots.toObjects(User.class);
    List<String> usersf = users.stream().map(user -> user.uid).toList()
    fi.onFollowingRetrieved(usersf);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM