【问题标题】:Can we make several requests with Firestore in android我们可以在 android 中使用 Firestore 发出几个请求吗
【发布时间】:2021-01-28 20:53:35
【问题描述】:

在带有firestore的android上我想做两个条件来显示结果

这是我的功能要求

 Query query=firebaseFirestore.collection("users").whereEqualTo("chauffeurs","");

我想要另一个相等的条件 ("driver", "Cyril") 我必须尝试给一个 .whereEqualTo ("drivers", "Cyril") 但它不会返回任何东西给我

【问题讨论】:

  • 添加第二个条件后,您期望得到什么?请注意,添加多个条件是 AND 操作,不支持跨多个字段的 OR。
  • 请编辑您的问题并将您的数据库结构添加为屏幕截图,并指明“chauffeurs”属性设置为“”且属性“driver”设置为“Cyril”的特定用户。也请回复@AlexMamo
  • 请提供 FrankvanPuffelen 和 AlexMamo 要求的信息
  • 你好实际上在驱动程序上我有三种可能是空的或者是 alexandre 或 cyril 对于我的应用程序如果分配给 alexandre,cyril 不需要看到它但是如果驱动程序是空的,两者都必须看到它

标签: java android firebase google-cloud-firestore


【解决方案1】:

我不知道这是否是您正在寻找的,但您可以创建一个界面,然后您可以通过一种方法获取和使用您的数据。例如;

private interface Callback {
    void onData(List<Users> list1, List<Users> list2, List<Users> list3);
}

界面包含 3 个列表。第一个列表包含 chauffeurs 字段等于 Cyril 的文档,第二个列表包含 chauffeurs 字段等于 Alexandre,最后一个列表包含 chauffeurs 等于“”(您可以根据需要更改界面)。

顺便说一下,Users 是与用户集合中的文档具有相同字段的对象。

public class Users {

    private String adresse, adresse2, chauffeurs, codepostal;

    public Users() {
    }

    public Users(String adresse, String adresse2, String chauffeurs, String codepostal) {
        this.adresse = adresse;
        this.adresse2 = adresse2;
        this.chauffeurs = chauffeurs;
        this.codepostal = codepostal;
    }

    public String getAdresse() {
        return adresse;
    }

    public void setAdresse(String adresse) {
        this.adresse = adresse;
    }

    public String getAdresse2() {
        return adresse2;
    }

    public void setAdresse2(String adresse2) {
        this.adresse2 = adresse2;
    }

    public String getChauffeurs() {
        return chauffeurs;
    }

    public void setChauffeurs(String chauffeurs) {
        this.chauffeurs = chauffeurs;
    }

    public String getCodepostal() {
        return codepostal;
    }

    public void setCodepostal(String codepostal) {
        this.codepostal = codepostal;
    }
}

您可以访问和使用这些列表/数据的方法(例如,您可以根据需要更改逻辑。由您决定):

private void getData(Callback callback) {
        Task<QuerySnapshot> task1 = ref.whereEqualTo("chauffeurs", "Cyril").get();
        Task<QuerySnapshot> task2 = ref.whereEqualTo("chauffeurs", "Alexandre").get();
        Task<QuerySnapshot> task3 = ref.whereEqualTo("chauffeurs", "").get();

        Task<List<QuerySnapshot>> allTasks = Tasks.whenAllSuccess(task1, task2, task3);
        allTasks.addOnCompleteListener(task -> {
            if (task.isSuccessful()) {
                QuerySnapshot query1 = (QuerySnapshot) task1.getResult();
                QuerySnapshot query2 = (QuerySnapshot) task2.getResult();
                QuerySnapshot query3 = (QuerySnapshot) task3.getResult();

                List<Users> list1 = new ArrayList<>();
                List<Users> list2 = new ArrayList<>();
                List<Users> list3 = new ArrayList<>();

                for (DocumentSnapshot document : query1) {
                    if (document.exists()) {
                        list1.add(document.toObject(Users.class));
                    }
                }
                for (DocumentSnapshot document : query2) {
                    if (document.exists()) {
                        list2.add(document.toObject(Users.class));
                    }
                }
                for (DocumentSnapshot document : query3) {
                    if (document.exists()) {
                        list3.add(document.toObject(Users.class));
                    }
                }
                callback.onData(list1, list2, list3);
            }
        });
    }

而当您想使用/获取这些数据时,只需调用该方法:

getData((list1, list2, list3) -> {
   //Documents where chauffeurs field equals Cyril
   for(int i = 0; i < list1.size(); i++){
       Users user = list1.get(i);
       String adresse = user.getAdresse();
       String adresse2 = user.getAdresse2();
       String chauffeurs = user.getChauffeurs();
       String codepostal = user.getCodepostal();
   }
   //Documents where chauffeurs field equals Alexandre
   for(int i = 0; i < list2.size(); i++){
       Users user = list2.get(i);
       String adresse = user.getAdresse();
       String adresse2 = user.getAdresse2();
       String chauffeurs = user.getChauffeurs();
       String codepostal = user.getCodepostal();
   }
   //Documents where chauffeurs field equals ""
   for(int i = 0; i < list3.size(); i++){
       Users user = list3.get(i);
       String adresse = user.getAdresse();
       String adresse2 = user.getAdresse2();
       String chauffeurs = user.getChauffeurs();
       String codepostal = user.getCodepostal();
   }

});

【讨论】:

    猜你喜欢
    • 2016-12-15
    • 2021-10-14
    • 1970-01-01
    • 2015-02-26
    • 2020-09-28
    • 2018-12-25
    • 2010-10-03
    • 1970-01-01
    • 2019-07-06
    相关资源
    最近更新 更多