【发布时间】:2021-02-05 23:23:10
【问题描述】:
我需要返回语句的 Firestore 查询结果。该方法返回一个空列表,因为 return 语句在任务完成之前运行。
这是我的 DatabaseManager 类中有问题的代码:
public List<Image> getImagesFromDatabase(Query query){
List<Image> dataList= new ArrayList<Image>();
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Image image=document.toObject(Image.class);
image.setDocumentId(document.getId());
dataList.add(image);
}
} else {
Log.d("DatabaseManager", "Error getting documents: ", task.getException());
}
}
});
return dataList;
}
这是使用先前方法返回的 List 的代码:
private int getMaxNumberId(){
Query query=dbManager.getCollectionReference().orderBy("numberId", Query.Direction.DESCENDING).limit(1);
List<Image> images=dbManager.getImagesFromDatabase(query);
Image maxImage=images.get(0);
return maxImage.getNumberId();
}
我读过关于 Future 的文章,据我所知,这不是一个好的解决方案,以及关于制作回调接口的文章,但由于 return 语句,我不知道如何实现该解决方案。
【问题讨论】:
-
请检查副本以了解如何解决该问题。那里有两个答案。第二个是使用 get() 和相应的回调。
-
@AlexMamo 谢谢,这行得通,但这是一个非常混乱的解决方案,至少对我来说,因为我有很多其他代码取决于 get() 的结果,因此,所有该代码必须在 onResponse() 中。
-
另一种方法可能是使用 Kotlin 协程。
标签: java android firebase google-cloud-firestore