【发布时间】:2018-03-24 04:53:36
【问题描述】:
我想从我的 Firebase Firestore 数据库中获取数据。我有一个名为 user 的集合,每个用户都有一些相同类型的对象的集合(我的 Java 自定义对象)。我想在创建 Activity 时用这些对象填充我的 ArrayList。
private static ArrayList<Type> mArrayList = new ArrayList<>();;
在 onCreate() 中:
getListItems();
Log.d(TAG, "onCreate: LIST IN ONCREATE = " + mArrayList);
*// it logs empty list here
调用方法以获取要列出的项目:
private void getListItems() {
mFirebaseFirestore.collection("some collection").get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot documentSnapshots) {
if (documentSnapshots.isEmpty()) {
Log.d(TAG, "onSuccess: LIST EMPTY");
return;
} else {
for (DocumentSnapshot documentSnapshot : documentSnapshots) {
if (documentSnapshot.exists()) {
Log.d(TAG, "onSuccess: DOCUMENT" + documentSnapshot.getId() + " ; " + documentSnapshot.getData());
DocumentReference documentReference1 = FirebaseFirestore.getInstance().document("some path");
documentReference1.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
Type type= documentSnapshot.toObject(Type.class);
Log.d(TAG, "onSuccess: " + type.toString());
mArrayList.add(type);
Log.d(TAG, "onSuccess: " + mArrayList);
/* these logs here display correct data but when
I log it in onCreate() method it's empty*/
}
});
}
}
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getApplicationContext(), "Error getting data!!!", Toast.LENGTH_LONG).show();
}
});
}
【问题讨论】:
-
由于获取响应需要时间,所以一开始它显示为空,所以如果还有其他问题,请更具体地说明您的问题。
-
不,这不是问题,因为我告诉过你我的列表中填满了最后一个 onSuccess 方法中的项目,我在日志中看到了,但在 onCreate 方法中它是空的
-
您仅在 onCreate 中获取数据,并且需要时间来获取它,因此您在 onCreate 中的日志甚至在获取数据之前就已运行。
-
@Slaven Petkovic 如果需要,请检查我的更新代码...
标签: java android arraylist google-cloud-firestore