如果条形码存在,我尝试返回布尔值。但是,当前设置此功能的方式始终返回false。它不会等待onComplete回调。
我尝试使用本地广播,但没有成功。尝试了另一个回调,没有用(或者我做错了)。考虑使用sleep(),但是如果您问我,它会使代码有些难闻。
编辑: 忘了提一下,我也尝试过使onComplete函数为boolean而不是void。也没用。
public boolean barcodeExists(final String barcode) {
DocumentReference barcodeRef = mFireStore.collection("xyz")
.document(barcode);
barcodeRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if(task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if(document.exists()) {
return true;
} else {
return false;
}
}
}
});
//always return false;
return false;
}
答案 0 :(得分:2)
创建回调侦听器,如下所示
public interface OnCompleteCallback{
void onComplete(boolean success);
}
修改方法以传递回调
public void barcodeExists(final String barcode,final OnCompleteCallback callback) {
DocumentReference barcodeRef = mFireStore.collection("xyz")
.document(barcode);
barcodeRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if(task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
callback.onComplete(document.exists());
}
}
});
}
BarcodeExists的最终呼叫
barcodeExists("key", new OnCompleteCallback(){
public void onComplete(boolean success){
// do something
}
});