Различные подколлекции в адаптере переработчика Firebase UI - PullRequest
1 голос
/ 12 апреля 2020

Я пытаюсь получить различные подколлекции и адаптировать их к своему RecyclerAdapter с помощью Firebase-UI.

My Cloud Firestore настроен так:

user:(Collection)
    uid1:(Document)
       name, email(fields)

data:(Collection)
    uid1:(Document)
       images:(Collection)
          document1
                   fields
       pdf:(Collection)
          document1
                  fields

Поэтому я подумал и не знаю, как запросить разные коллекции с одной и той же моделью и адаптировать их к адаптеру утилизатора.

Мой реальный код может извлекать изображения:

private void setupImages(){
    Query query = fStore.collection("data").document(userID).collection("images"); //get images collection

    FirestoreRecyclerOptions<Data> options = new FirestoreRecyclerOptions.Builder<Data>().setQuery(query,Data.class).build(); 

    FirestoreRecyclerAdapter adapter = new ImageAdapter(options, getContext());

    recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2));

    recyclerView.setAdapter(adapter); //adapt the query to adapter
}

И класс связывает данные с представлением с помощью модели данных.

Я думал о создании списка и добавлении элементов, но я не думаю, что это хороший способ, и должны быть другие варианты.

Вопрос: Как связать разные коллекции в адаптер утилизатора без замены?

PS: Не стесняйтесь комментировать любым способом, чтобы улучшить мою базу данных. Я новенький!

1 Ответ

1 голос
/ 12 апреля 2020

Согласно ответу:

Да, все!

На этот вопрос:

Итак, вы хотите получить данные из data/userID/images и data/userID/pdfs в одном запросе?

Ответ: вы не можете. Невозможно получить данные из двух разных коллекций в одном запросе, даже если объекты в обеих коллекциях одинаковы. Запросы в Firestore являются мелкими, это означает, что вы можете получать документы только из коллекции, с которой выполняется запрос. Если вам нужно получить документы из обеих коллекций, вам нужно создать два отдельных запроса. В Android вы можете достичь этого с помощью метода Tasks whenAllSuccess () , как объяснено в моем ответе из следующего поста:

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

...