Чтение данных из Android Cloud FireStore - PullRequest
0 голосов
/ 16 мая 2018

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

Это скрипт:

private void getCustomer(){
        firestoreDB.collection("customer")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            customers = new ArrayList<>();
                            for (DocumentSnapshot doc : task.getResult()) {
                                Customer customer = doc.toObject(Customer.class);
                                customer.setId_customer(doc.getId());
                                customers.add(customer);
                            }
                        } else {
//                            Log.d(TAG, "Error getting documents: ", task.getException());
                        }
                    }
                });

        firestoreListener = firestoreDB.collection("customer")
                .addSnapshotListener(new EventListener<QuerySnapshot>() {
                    @Override
                    public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {
                        if (e != null) {
//                            Log.e(TAG, "Listen failed!", e);
                            return;
                        }
                        customers = new ArrayList<>();
                        for (DocumentSnapshot doc : documentSnapshots) {
                            Customer customer = doc.toObject(Customer.class);
                            customer.setId_customer(doc.getId());
                            customers.add(customer);
                        }
                    }
                });

        id_customer = customers.get(0).getId_customer();
    }

а это мой пожарный магазин:

my firestore

1 Ответ

0 голосов
/ 16 мая 2018

Вы не можете использовать что-то, что еще не было загружено.Другими словами, вы не можете просто использовать следующую строку кода:

id_customer = customers.get(0).getId_customer();

За пределами метода onSuccess(), потому что это всегда будет null из-за асинхронного поведения этого метода.Это означает, что к тому времени, когда вы пытаетесь использовать переменную id_customer вне этого метода, данные еще не закончили загрузку из базы данных, и поэтому они недоступны.

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

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