我试图将所有文档的结果放在ArrayList变量中时遇到问题,我可以得到结果,但我只能在onComplete方法中使用它们。我甚至可以用我得到的数据设置我的txtviews但我不能将它存储在Arraylist中。我使用此var作为我的适配器的参数来查看ListView中的所有这些项。我做错了什么?
public List<Producto> menu;
menu= new ArrayList<Product>();
//Reference to the collection I want to get all documents
colRef
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful()){
int i = 0;
for(DocumentSnapshot document : task.getResult()){
Product product = document.toObject(Product.class);
menu.add(producto);
Toast.makeText(MenuActivity.this, ""+menu.get(i).getName(), Toast.LENGTH_SHORT).show();
i++;
}
}else{
Toast.makeText(MenuActivity.this, "Error", Toast.LENGTH_SHORT).show();
}
}
});
Toast.makeText(MenuActivity.this, ""+productosMenu.size(), Toast.LENGTH_SHORT).show();
循环上的Toast,显示保存到ArrayList但在侦听器外部的数据我再次验证ArrayList的大小,我得到0大小,当然我的屏幕是空的,因为适配器无法读取任何项目阵... 我是新的android和firebase,但试图学习,我正在制作餐厅应用程序。我很感激,如果有人可以指导我,我无法找到任何其他线索,我做错了什么。感谢。
答案 0 :(得分:0)
addLayer
方法是异步的。它在执行查询时立即返回。这意味着在最后一行执行Toast时,get()
数组将为空。
如果您只想在查询完成后执行某些工作,请在menu
返回的任务的回调中执行此操作,您当前正在迭代结果中的文档。