代码之家  ›  专栏  ›  技术社区  ›  Scrin

如何在onComplete方法中设置变量?[副本]

  •  0
  • Scrin  · 技术社区  · 4 年前

    目前,我正试图将一个值传递给 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);
    
                    }
                }
            }
        });
    

    这是我试图在外面使用它 on完成 :

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

    这是我的日志:

    enter image description here

    2 回复  |  直到 4 年前
        1
  •  2
  •   Gabe Sechan    4 年前

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

        2
  •  0
  •   Adrian Russo    4 年前

    您可以从日志输出中看到以下代码 onComplete() 实际上是先被调用,然后是内部的代码 onComplete() .由于这些 String 值尚未分配,正在返回 null 。您必须将方法外的代码添加到 onComplete() ,或确保 onComplete() 被称为第一。