从Firestore查询。需要获取对象列表

时间:2018-08-08 20:14:57

标签: android firebase google-cloud-firestore

需要基于参数LIST而不是1个参数来获取对象列表。

步骤1:我们从一个集合ONE中获得uidUsers列表,并将其保存为列表 步骤2:在集合2中,我只需要从步骤1的列表中获取文档等于值的那些文档(具有值的对象)。

我想通过将文档名称与列表中的uid比较来过滤文档。但是在API中找不到任何解决方案。 现在也许可以将uidUser保存在文档字段中,因此我可以尝试通过将文档字段的键值与列表中的值进行比较来查找。但是我不知道如何。

我有一个小代码

  public void getNeededUsers(List<String> uidList, UsersListCallback usersListCallback){
    Query query = db.collection(Consts.COLLECTION_USERS);
    for (String uid: uidList) {
        query.whereEqualTo("uid", uid);
    }
    query.get().addOnCompleteListener(task -> {
        List<User> userList = new ArrayList<>();
        for(DocumentSnapshot snapshot: task.getResult().getDocuments()){
            userList.add(snapshot.toObject(User.class));
        }
        usersListCallback.getUsers(userList);
    });
}

1 个答案:

答案 0 :(得分:1)

尝试一下:-

public void getNeededUsers(List<String> uidList, UsersListCallback usersListCallback){
List<User> userList = new ArrayList<>();

for (int i = 0; i < uidList.size(); i++){
    db.collection("Collection A").whereEqualTo("uid", uidList.get(i))
        .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
            @Override
            public void onSuccess(DocumentReference documentReference) {
                userList.add(documentReference.getId());
                }
            })
            .addOnFailureListener(this, new OnFailureListener() {
                @Override
                public void onFailure(Exception e) {
                    Toast.makeText(ActivityName.this, "Error In Fetching Uid's" + e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
            });
        }

现在userList将包含所有匹配的uid。现在,基于这些uid从集合2中检索数据。

通过调用fetchData(userList);

public void fetchData(List<String> documentList)
{
for (int j = 0; j < documentList.size(); j++){
    db.collection("Collection B").whereEqualTo("uid", documentList.get(i))
    .get()
    .addOnCompleteListener(this, new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(Task<QuerySnapshot> task) {
            if (task.isSuccessful())
            {
                for (QueryDocumentSnapshot documentSnapshot : task.getResult())
                {
                    //Here you can fetch data or convert it to object
                }
            }
        }
    })
            .addOnFailureListener(this, new OnFailureListener() {
                @Override
                public void onFailure(Exception e) {
                    Toast.makeText(ActivityName.this, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
                    pd.dismiss();
                }
            });
     }
}