Не удается сохранить данные из прослушивателя событий в Firestore - PullRequest
0 голосов
/ 19 февраля 2020

Привет, ребята, и спасибо вам за потраченное время.

Итак, в моем приложении я пытаюсь получить данные в реальном времени из моей базы данных firestore с помощью SnapshotListener, а затем сохранить их в глобальной переменной. Сама извлечение работает нормально, но когда я пытаюсь сохранить его в массиве, происходит сбой. В нем говорится, что массив пуст потом.

Можете ли вы, ребята, объяснить мне, что не так, так как я все еще начинаю с этой вещи в пожарном магазине?

Вот часть кода, которую я считаю полезной:

// Get barbershops nearby from google firestore
        MainActivity.db.collection("barbershops")
                .addSnapshotListener(new EventListener<QuerySnapshot>() {
                    @Override
                    public void onEvent(@Nullable QuerySnapshot value,
                                        @Nullable FirebaseFirestoreException e) {
                        if (e != null) {
                            Log.w(TAG, "Listen failed.", e);
                            return;
                        }

                        for (QueryDocumentSnapshot doc : value) {
                            Log.d(TAG, doc.getId() + " => " + doc.getData());
                            Barbershop bbs = doc.toObject(Barbershop.class);
                            barbershops.add(bbs);
                        }
                    }
                });

        progressBar.setVisibility(View.GONE);

        // Set up the recycler view
        RecyclerView recyclerView = view.findViewById(R.id.recyclerView);

        // use a linear layout manager
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(layoutManager);

        mAdapter = new MyAdapter(barbershops, getContext(), this);
        recyclerView.setAdapter(mAdapter);

        return view;

и затем у меня также есть глобальная переменная:

private ArrayList<Barbershop> barbershops;

Спасибо!

1 Ответ

3 голосов
/ 19 февраля 2020

addSnapshotListener является асинхронным и возвращается немедленно. Обратный вызов вызывается через некоторое время с результатами запроса. Это означает, что barbershops не будет заполнен сразу. Из вашего вопроса не ясно, что на самом деле означает «массив пуст», но если вы попытаетесь использовать barbershops до вызова, вы не увидите данные из этих документов. Этот список следует использовать только после вызова обратного вызова.

...