gpt4 book ai didi

java - firestore 和 wait 中的链式查询如何检索数据

转载 作者:行者123 更新时间:2023-11-30 10:02:20 25 4
gpt4 key购买 nike

我想在 firestore 中进行链式查询。在获取另一个集合中的其他信息之前,我需要有关一个集合的一些信息。

我已经尝试使用 Tasks.whenall()...但效率不高。我也尝试使用 callBack

这是我的第一个函数:

public static void getAllFavoris(){
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
FirebaseFirestore.getInstance().collection("product").document("favoris").collection(uid).get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {//task is succesful
Log.e("TAG","task succes for fav ");
for (QueryDocumentSnapshot document : task.getResult()){//never enter in this loop
Log.e("TAG","Doc "+document);
Log.e("TAG", "Succes for get all favoris");
Log.e("TAG","data for favoris ::: "+document.getId());
MainActivity.favorisList.add(document.getId());
}
}
else {
Log.d("TAG", "Error getting documents: ", task.getException());
}
//call without data retrieve
Log.e("TAG","favoris ::: "+showListContentS(MainActivity.favorisList));
getProductByTagFound();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e("TAG","error get All favoris"+e);
}
});
}

这是我需要的第二个查询:

public static void getProductByTagFound(){
for(int i=0;i<MainActivity.allTags.size();i++){ //allTags is not empty and i need to finish this loop
String tagId = MainActivity.allTags.get(i).toString();
FirebaseFirestore.getInstance().collection("product").document("allProduct").collection("productByTag").document(tagId).get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()){
Log.e("TAG", "Succes for get productByTag");
Product pdt = task.getResult().toObject(Product.class);
MainActivity.productByTag.add(pdt);

}
}
});
}
//this must be call after the loop is finish but call in the same time.
Log.e("TAG","Get product BY Tag"+showListContentP(MainActivity.productByTag));
createFinalList();

我需要在循环结束后调用 createFinalList() 并进入循环以获取数据并在之后调用 getProductByTag()

最佳答案

如果您想在第一个查询完成后立即执行新查询,则需要等到第一个查询完成。要解决这个问题,您需要使用嵌套查询。换句话说,您需要将第二个查询移动到第一个回调中,在 onComplete() 方法中。这样,只有在第一个查询完成时,才会执行第二个查询。

关于java - firestore 和 wait 中的链式查询如何检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56966483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com