此脚本是否有误,因为我收到的数据是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();
}
这是我的火库:
答案 0 :(得分:0)
您现在还无法使用尚未加载的内容。换句话说,您不能简单地使用以下代码行:
id_customer = customers.get(0).getId_customer();
在onSuccess()
方法之外,因为此方法的异步行为始终为null
。这意味着,当您尝试在该方法之外使用id_customer
变量时,数据尚未从数据库中完成加载,这就是无法访问的原因。
这个问题的快速解决方法是仅在onSuccess()
方法中使用该结果,或者如果你想在外面使用它,我建议你从这个 {看到我的anwser的最后一部分{3}} ,其中我已经了解了如何使用自定义回调来完成它。您还可以查看此 post ,以便更好地理解。