Можно ли объединить неизвестное количество запросов FireStore в Android? - PullRequest
2 голосов
/ 03 июля 2019

Этот ответ касается того, как объединить два запроса, и я полагаю, что это можно сделать для любого количества известных запросов. Однако у меня есть массив значений, которые я хочу использовать для фильтрации документов, содержащих поле с этими значениями (это одно и то же поле для всех значений). Приведенный выше метод не представляется достаточным для этой цели.

Я попытался создать массив запросов с помощью оператора new, но это не работает, поскольку Query является приватным.

Query query = db.collection("posts")
                .whereEqualTo("userId", followingList)//followingList is a list of Strings that I want to query
                .orderBy("imageUrl_1", Query.Direction.ASCENDING);

Это не работает, поскольку followingList не является String

Как я пытался создать массив запросов, который не работает:

ArrayList<Query> list = new ArrayList<Query>();
        for(String s : followingList){
            list.add(new Query());//does not compile
        }

enter image description here Это изображение моего Firestore показывает, как создается followingList. Он обновляется, когда пользователь нажимает «подписаться» на сообщение другого пользователя. То, что я хочу сделать, это создать запрос всех сообщений (содержащихся в отдельной коллекции), которые содержат пользовательские элементы, содержащиеся в followingList

1 Ответ

1 голос
/ 06 июля 2019

Я проверил это в моем текущем проекте, он отлично работает (проверено только для двух документов с следующим списком элементов размером 2 элемента)

public void testMy() {
        db = FirebaseFirestore.getInstance();
        List<String> followingList = new ArrayList<>();
        followingList.add("tag1"); followingList.add("tag2"); followingList.add("tag3"); // ...
        List<Task> taskList = new ArrayList<>();

        for (String s : followingList) {
            Query query = db.collection("invites")
                    .whereEqualTo("uid", s)
                    .orderBy("imageUrl_1", Query.Direction.ASCENDING);; //followingList is a list of Strings that I want to query
            Task<QuerySnapshot> task = query.get();
            taskList.add(task);
        }

        Tasks.whenAllSuccess(taskList.toArray(new Task[taskList.size()])).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
            @Override
            public void onSuccess(List<Object> objects) {
                @SuppressWarnings("unchecked")
                List<QuerySnapshot> querySnapshots = (List<QuerySnapshot>)(List<?>) objects;
                for (QuerySnapshot qs : querySnapshots) {
                    for (QueryDocumentSnapshot qds : qs) {
                        Log.d(TAG, qds.getData().toString());
                    }
                }
            }
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...