Android firebase数据库中的异步侦听器 task1=firestore.collection(collection).document(city.collection(“Bigads”).get().addOnCompleteListener(新的OnCompleteListener()){ @凌驾 未完成的公共void(@NonNull任务){ if(task1.issusccessful()){ if(task1.getResult().isEmpty()){ }否则{ 对于(DocumentSnapshot文档:task.getResult()){ AdsModel ad=newadsmodel(docs.getString(“For”)、docs.getString(“ImageURL”)、docs.getString(“产品”)、docs.getString(“ShopUID”); Bdata.add(ad); homeMainAdapter.notifyDataSetChanged(); 最近显示所有.setVisibility(View.VISIBLE); rvd设置可见性(视图可见); 设置可见性(View.VISIBLE); end.setVisibility(View.VISIBLE); } } }否则{ } } });
在task2中,需要检查task1是否为空的条件是一个if条件。如果task2在task1之前运行,则两个侦听器都是异步的,那么if条件将变为true,结果将是错误的。如何处理此任务,以便task1应先运行,然后再运行task2Android firebase数据库中的异步侦听器 task1=firestore.collection(collection).document(city.collection(“Bigads”).get().addOnCompleteListener(新的OnCompleteListener()){ @凌驾 未完成的公共void(@NonNull任务){ if(task1.issusccessful()){ if(task1.getResult().isEmpty()){ }否则{ 对于(DocumentSnapshot文档:task.getResult()){ AdsModel ad=newadsmodel(docs.getString(“For”)、docs.getString(“ImageURL”)、docs.getString(“产品”)、docs.getString(“ShopUID”); Bdata.add(ad); homeMainAdapter.notifyDataSetChanged(); 最近显示所有.setVisibility(View.VISIBLE); rvd设置可见性(视图可见); 设置可见性(View.VISIBLE); end.setVisibility(View.VISIBLE); } } }否则{ } } });,android,firebase,asynchronous,google-cloud-firestore,Android,Firebase,Asynchronous,Google Cloud Firestore,在task2中,需要检查task1是否为空的条件是一个if条件。如果task2在task1之前运行,则两个侦听器都是异步的,那么if条件将变为true,结果将是错误的。如何处理此任务,以便task1应先运行,然后再运行task2 task2=firestore.collection(“用户”).document(uid).collection(“rvd”).get().addOnCompleteListener(新的OnCompleteListener()){ @凌驾 未完成的公共void(@N
task2=firestore.collection(“用户”).document(uid).collection(“rvd”).get().addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()&&task1.getResult().isEmpty()){
对于(DocumentSnapshot文档:task.getResult()){
RvdModel r=新的RvdModel(doc.get(“image1”).toString()、doc.get(“ProductUID”).toString()、doc.get(“Brand”).toString());
Rdata.add(r);
rvdAdapter.notifyDataSetChanged();
Toast.makeText(MainActivity.this,“working”,Toast.LENGTH_SHORT.show();
suggestionRView.setVisibility(View.VISIBLE);
suggest.setVisibility(View.VISIBLE);
建议显示所有.setVisibility(View.VISIBLE);
}
}否则{
Toast.makeText(MainActivity.this,“errorr”,Toast.LENGTH_SHORT.show();
}
}
});
您可以将您的Task2
放入Task1的onComplete
中
Task task2= firestore.collection("user").document(uid).collection("rvd").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful() && task1.getResult().isEmpty()) {
for (DocumentSnapshot doc : task.getResult()) {
RvdModel r = new RvdModel(doc.get("image1").toString(), doc.get("ProductUID").toString(), doc.get("Brand").toString());
Rdata.add(r);
rvdAdapter.notifyDataSetChanged();
Toast.makeText(MainActivity.this, "working", Toast.LENGTH_SHORT).show();
suggestionRView.setVisibility(View.VISIBLE);
suggest.setVisibility(View.VISIBLE);
suggest_show_all.setVisibility(View.VISIBLE);
}
} else {
Toast.makeText(MainActivity.this, "errororr", Toast.LENGTH_SHORT).show();
}
}
});
task1=firestore.collection(collection).document(city.collection(“Bigads”).get().addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
//在任务1成功时,做一些事情
//在确保task.getResult().isEmpty()之后在此调用task2。
if(task.getResult().isEmpty()){
任务task2=firestore.collection(“user”).document(uid).collection(“rvd”).get().addOnCompletListener(新的OnCompletListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
//做些事情。。。
}
}
}
尝试使用rx java,它将解决您的问题“寻求调试帮助的问题(“此代码为什么不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题说明的问题对其他读者没有用处。请参阅:请你用代码@gianhtrans解释一下,因为它是一个异步侦听器,我不知道如何处理任务@FrankvanPuffelen@user175799现在我给你一把钥匙,你应该先试试。如果你对RXJava没有基础,那很难理解。让我们试试吧
Task task2= firestore.collection("user").document(uid).collection("rvd").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful() && task1.getResult().isEmpty()) {
for (DocumentSnapshot doc : task.getResult()) {
RvdModel r = new RvdModel(doc.get("image1").toString(), doc.get("ProductUID").toString(), doc.get("Brand").toString());
Rdata.add(r);
rvdAdapter.notifyDataSetChanged();
Toast.makeText(MainActivity.this, "working", Toast.LENGTH_SHORT).show();
suggestionRView.setVisibility(View.VISIBLE);
suggest.setVisibility(View.VISIBLE);
suggest_show_all.setVisibility(View.VISIBLE);
}
} else {
Toast.makeText(MainActivity.this, "errororr", Toast.LENGTH_SHORT).show();
}
}
});
Task task1= firestore.collection(collection).document(city).collection("Bigads").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
// On task1 success do some stuff
// Call task2 here after ensure task.getResult().isEmpty().
if (task.getResult().isEmpty()){
Task task2= firestore.collection("user").document(uid).collection("rvd").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
// Do some stuff...
}
}
}