代码之家  ›  专栏  ›  技术社区  ›  RPH

从云FireStore Android读取数据

  •  0
  • RPH  · 技术社区  · 6 年前

    此脚本是否错误,因为我收到的数据是 null 我在云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();
        }
    

    这是我的firestore:

    my firestore

    1 回复  |  直到 6 年前
        1
  •  0
  •   Alex Mamo    6 年前

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

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

    外部 onSuccess() 方法,因为它总是 null 由于此方法的异步行为。这意味着当您尝试使用 id_customer 该方法之外的变量,数据尚未从数据库加载完毕,因此无法访问。

    这个问题的一个快速解决方法是只在 onSuccess() 方法,或者如果您想在外部使用它,我建议您查看我的anwser的最后一部分 post 在这篇文章中,我举例说明了如何使用自定义回调来完成。你也可以看看这个 video 为了更好的理解。