我想要写的代码是
private String val;
    public String checkEmail(){
        FirebaseFirestore db = FirebaseFirestore.getInstance();
        db.collection("cities").whereEqualTo("cities", "Boston").get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()){
                            val = "City exists";
                        }else{
                            val = "City does not exist";
                        }
                    }
                });
        return val;
    }这段代码以null而不是值的形式返回val。如何解决这个问题呢?
发布于 2020-05-21 16:41:44
我确信这一点,因为调用是异步的,请将您的方法更改为非返回值(void),并创建一个接口回调以在调用完成时返回值。试试这个..。
interface CityCallback {
     void isCityExist(boolean exist);
}
public void checkEmail(CityCallback cityCallback){
    FirebaseFirestore db = FirebaseFirestore.getInstance();
    db.collection("cities").whereEqualTo("cities", "Boston").get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()){
                        cityCallback.isCityExist(true);
                    }else{
                        cityCallback.isCityExist(false);
                    }
                }
            });
}要调用该方法,它将如下所示
checkEmail(new CityCallback {
      @Override
      public void isCityExist(boolean exist) {
           if (exist) {
              // set the value of variable val or anything
           } else {
              // set the value of variable val or anything
           }
      }
});我希望它能帮助你
https://stackoverflow.com/questions/61930061
复制相似问题