在OnCompleteListener之后,java ArrayList在从FireStore接收数据后清空,如何保存它?
我从FireStore集合中获取并将其添加到ArrayList中的代码中应该有可见的数据,我知道这是因为get()方法立即返回,因此查询尚未完成,因此onCreate()方法不会看到任何数据,但有没有办法将该数据保存在ArrayList中并在其他地方使用
例如,这里有两个版本的代码: 第一个是用完整的清单做吐司,就像它应该做的那样:
db.collection("Users Data")
.document(currentUserID)
.collection("Follows")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
following.add(document.getId());
Toast.makeText(SearchedProfile.this, following.toString(), Toast.LENGTH_SHORT).show();
}
}
}
});
第二个是用空的数组列表做吐司(吐司上写着“[]”)
db.collection("Users Data")
.document(currentUserID)
.collection("Follows")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
following.add(document.getId());
}
}
}
});
Toast.makeText(SearchedProfile.this, following.toString(), Toast.LENGTH_SHORT).show();
唯一的区别是Toast方法的位置
# 1 楼答案
您收到一个空数组列表,因为您的代码isn't synchronous
换言之,在您的oncomplete运行之前,祝酒词会被调用。 当oncomplete运行时,您需要调用在回调中使用数据的方法