【问题标题】:How do I set a variable inside of an onComplete method? [duplicate]如何在 onComplete 方法中设置变量? [复制]
【发布时间】:2020-12-31 00:11:05
【问题描述】:

目前我正在尝试将值传递给 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);

这是我的日志:

【问题讨论】:

  • 很明显,调用是在onComplete中完成的……不是在addOnCompleteListener之后……我们称之为异步调用
  • @Selvin 你能看看我的接口解决方案吗? donorFullNamedonorEmail 仍然是空值。

标签: java android firebase google-cloud-firestore


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以从日志输出中看到,实际上首先调用了onComplete() 之外的代码,然后是onComplete() 内部的代码。由于尚未分配这些 String 值,因此它正在返回 null。您要么必须将方法之外的代码添加到onComplete(),要么确保首先调用onComplete()

    【讨论】:

      猜你喜欢
      • 2017-02-01
      • 2017-06-01
      • 2012-09-29
      • 2014-09-22
      • 2014-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多