这个问题在这里已经有答案了:
如何作为方法的结果返回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);
这是我的日志:
2条答案
按热度按时间xxb16uws1#
您可以从日志输出中看到
onComplete()
实际上是先被调用,然后是里面的代码onComplete()
. 自从这些String
值尚未赋值,正在返回null
. 您要么将方法之外的代码添加到onComplete()
,或确保onComplete()
被称为第一。s4chpxco2#
oncomplete是回调。它将在将来的某个时候被调用,而不是立即调用。你没有办法知道什么时候会这样,因为这是在等待一些任务完成。任何需要oncomplete结果的代码都需要在oncomplete函数中调用,而不是在其他地方调用。