繁体   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