我已经使用Firestore查询创建了一个函数来获取文档的大小,Firestore查询工作正常,因为我在android的LogCat中得到了结果。此函数的问题在于它不会返回另一端的文档大小。
public String getDateFromFirestore(String UID, String animId){
db.collection("users").document(UID).collection("animals").
document(animalId).get().addOnCompleteListener(new
OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if(task.isSuccessful()){
size = task.getresults().getDocuments.size();
}
Log.w("Size:",String.valueOf(size));
}
});
return String.valueOf(size);
}
要检索函数的结果,我使用下面的代码:
String size = getDateFromFirestore(UID, animId);
答案 0 :(得分:0)
数据是从Firestore(和大多数现代Web API)异步加载的。这样做是为了在加载数据时不阻止您的应用,这将导致“应用无响应”#34;对话框。
最简单的方法是使用一些放置好的日志语句:
System.out.println("Before starting get()");
db.collection("users").document(UID).collection("animals").
document(animalId).get().addOnCompleteListener(new
OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
System.out.println("In onComplete()");
}
});
System.out.println("After starting get()");
运行此代码时,输出为:
在开始get()之前
启动get()
之后在onComplete()
中
这可能不是你所期望的。但它完全解释了为什么您返回了错误的值:在return
语句运行时,您的数据尚未加载。
您无法返回仍在异步加载的 now 数据。我的典型解决方案是重新设置问题,然后首先获取大小,然后使用大小&#34;到&#34;开始获得大小。一旦我们有了这个尺寸,就用它做xyz&#34;。在代码中,这意味着您将需要大小的代码移动到onComplete()
方法中,类似于Log.w()
已经存在的位置。
有关详情,请参阅: