如何在oncomplete方法中设置变量?

ozxc1zmp  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(548)

这个问题在这里已经有答案了

如何作为方法的结果返回datasnapshot值(5个答案)
9天前关门了。
当前,我正在尝试将值传递给 onComplete() 方法。但是,当我尝试在方法之外使用它时,它没有传递任何信息。
这是我的 onComplete 代码:

docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if(task.isSuccessful()){
                DocumentSnapshot document = task.getResult();
                if(document.exists()){

                    Log.d(TAG,"User full name: " + document.getString("FullName"));
                    Log.d(TAG, "User email: " + document.getString("Email"));
                    donorFullName = document.getString("FullName");
                    donorEmail = document.getString("Email");
                    Log.d(TAG, "donorFullName set: " + donorFullName);
                    Log.d(TAG, "donorEmail set: " + donorEmail);

                }
            }
        }
    });

这是我试图用它以外的 onComplete :

BookingInformation bookingInformation = new BookingInformation();
    Log.d(TAG, "donorFullName bookingInformation: " + donorFullName);
    Log.d(TAG, "donorEmail bookingInformation: " + donorEmail);
    bookingInformation.setDonorName(donorFullName);
    bookingInformation.setDonorEmail(donorEmail);

这是我的日志:

xxb16uws

xxb16uws1#

您可以从日志输出中看到 onComplete() 实际上是先被调用,然后是里面的代码 onComplete() . 自从这些 String 值尚未赋值,正在返回 null . 您要么将方法之外的代码添加到 onComplete() ,或确保 onComplete() 被称为第一。

s4chpxco

s4chpxco2#

oncomplete是回调。它将在将来的某个时候被调用,而不是立即调用。你没有办法知道什么时候会这样,因为这是在等待一些任务完成。任何需要oncomplete结果的代码都需要在oncomplete函数中调用,而不是在其他地方调用。

相关问题