从Cloud FireStore Android读取数据

时间:2018-05-16 10:24:55

标签: java android firebase arraylist google-cloud-firestore

此脚本是否有误,因为我收到的数据是null,而我在Cloud Firestore上添加了数据。我不使用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 :(得分:0)

您现在还无法使用尚未加载的内容。换句话说,您不能简单地使用以下代码行:

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

onSuccess()方法之外,因为此方法的异步行为始终为null。这意味着,当您尝试在该方法之外使用id_customer变量时,数据尚未从数据库中完成加载,这就是无法访问的原因。

这个问题的快速解决方法是仅在onSuccess()方法中使用该结果,或者如果你想在外面使用它,我建议你从这个 {看到我的anwser的最后一部分{3}} ,其中我已经了解了如何使用自定义回调来完成它。您还可以查看此 post ,以便更好地理解。