等待onComplete回调

时间:2018-09-01 12:21:02

标签: android

如果条形码存在,我尝试返回布尔值。但是,当前设置此功能的方式始终返回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;
}

1 个答案:

答案 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
  }
});