android - 数组列表方法返回一个从firebase获取数据的空数组
问题描述
我的返回有问题..因为下载数据需要几秒钟,当方法返回 ArrayList 时,它仍然是空的。事实上,如果我先把那几行代码Log.v("array", String.valueOf(partecipantsArrayList));
打印出来,它会打印 0,然后打印填充的数组。所以我必须在返回声明之前等待..有什么办法可以做到这一点?
public ArrayList<String> getPartecipantsList(){
String email = getEmail();
String groupTitle = getTitleBar();
DocumentReference docRef = db.collection("users").document(email).collection("Group").document(groupTitle);
docRef.get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
DocumentSnapshot document = task.getResult();
//Extracting participants ArrayList from the document
for(Object item : task.getResult().getData().values()) {
String[] values = String.valueOf(item).replace("[", "").replace("]", "").split(",");
for (String value : values){
partecipantsArrayList.add(value);
}
}
partecipantsArrayList.remove(String.valueOf("["));
partecipantsArrayList.remove(partecipantsArrayList.size() - 1);
Log.v("array", String.valueOf(partecipantsArrayList));
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
return partecipantsArrayList;
}
解决方案
这是异步任务,您可以像下面这样调整此代码。
将该方法的签名更改为return void
public void getPartecipantsList();
完成后执行下一步操作
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
...............
partecipantsArrayList.remove(String.valueOf("["));
partecipantsArrayList.remove(partecipantsArrayList.size() - 1);
Log.v("array", String.valueOf(partecipantsArrayList));
// do your action by calling next method from here
//eg: setResultFromArray(partecipantsArrayList);
}
在onFailure
.
@Override
public void onFailure(@NonNull Exception e) {
//......
}
推荐阅读
- flutter - 在 Flutter 组件库中使用 Intl
- gitlab - 我们可以创建带有 GUI 界面的 Gitlab CI 管道容器以交互模式运行测试用例(无头)吗
- javascript - jsbn 库 BigInteger 否定函数似乎不起作用
- database - 默认生成为 IDENTITY DB2
- r - 如何使用 R Shiny 中的单选按钮在同一图形上显示图?
- python - matplotlib 散点图的帕累托前沿
- php - Imagick getImagePixelColour alpha不一致
- javascript - 如果缺少值,如何抛出异常?
- python - Nginx 阻止来自 HTML 表单的数据
- reporting-services - 根据表达式隐藏报告标题 (SSRS) 会出错