Firebase 在Firestore中创建具有电子邮件和密码的用户时,如何从OnCompleteListener返回值?

Firebase 在Firestore中创建具有电子邮件和密码的用户时,如何从OnCompleteListener返回值?,firebase,android-studio,google-cloud-firestore,Firebase,Android Studio,Google Cloud Firestore,我要写的代码是 private String val; public String checkEmail(){ FirebaseFirestore db = FirebaseFirestore.getInstance(); db.collection("cities").whereEqualTo("cities", "Boston").get() .addOnCompleteListener(new OnCompleteL

我要写的代码是

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;
    }



此代码将val返回为null,而不是值。如何解决此问题?

我确信这是因为调用是异步的,请将方法更改为non-return value 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);
                    }
                }
            });
}

我希望它能帮助您

我确信这一点,因为调用是异步的,请将您的方法更改为non-return value 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);
                    }
                }
            });
}
我希望它能帮助你