Получить все документы коллекции, которая находится в документе Cloud Firestore - PullRequest
0 голосов
/ 03 июля 2019

У меня есть список людей (пилото), и у каждого человека есть коллекция с некоторыми аудиозаписями.Я помещаю эту аудиозапись в список, который отправляет адаптер и показывает его в виде утилита.

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

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

public class PilotoDetalle extends AppCompatActivity {

RecyclerView rv;

List<Audio> audios;

AdapterAudios adapter;

private Audio audio;

private Piloto piloto;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_piloto_detalle);

    rv = findViewById(R.id.recyclerAudio);
    rv.setLayoutManager(new LinearLayoutManager(this));

    audios = new ArrayList<>();
    adapter = new AdapterAudios(audios);
    rv.setAdapter(adapter);

    final FirebaseFirestore db = FirebaseFirestore.getInstance();
    db.collection("pilotos").document(piloto.getId()).collection("audios")
            .addSnapshotListener(new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(@Nullable QuerySnapshot snapshots,
                                    @Nullable FirebaseFirestoreException e) {

                    if (e != null) {
                        Log.w("TAG", "listen:error", e);
                        return;
                    }

                    for (DocumentChange dc : snapshots.getDocumentChanges()) {
                        switch (dc.getType()) {
                            case ADDED:
                                Log.d("TAG", "New Msg: " + dc.getDocument().toObject(Message.class));
                                //audios.removeAll(audios);
                                Audio audio = dc.getDocument().toObject(Audio.class);
                                audios.add(audio);
                                break;
                            case MODIFIED:
                                Log.d("TAG", "Modified Msg: " + dc.getDocument().toObject(Message.class));
                                break;
                            case REMOVED:
                                Log.d("TAG", "Removed Msg: " + dc.getDocument().toObject(Message.class));
                                break;
                        }
                    }
                }
            });
}

1 Ответ

0 голосов
/ 04 июля 2019

Это происходит потому, что при первой установке адаптера список пуст.

audios = new ArrayList<>();
adapter = new AdapterAudios(audios);
rv.setAdapter(adapter);

Вы должны заполнить audios внутри EventListener и установить / поменять адаптер там, чтобы получитьданные при обновлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...