创建了Firebase Auth帐户,但从未调用完整的侦听器

时间:2019-02-18 21:19:28

标签: java android firebase firebase-authentication

我的主要活动中有此方法,只有在确认用户帐户已成功创建后,我才能继续操作。当我单击确认时,我可以看到该帐户是在firebase上创建的,但是似乎从未调用过onCompleteListener,因此我的倒计时闩锁的价值从未降低。

public boolean signUpUser(User user)
{

    FirebaseApp.initializeApp(this);



    FirebaseAuth firebaseAuth=FirebaseAuth.getInstance();
    FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();


   // success = false;

    CountDownLatch countDownLatch = new CountDownLatch(1);

    Log.e("Account","Creating user");

    firebaseAuth.createUserWithEmailAndPassword(user.getEmail(),user.getPassword()).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
             @Override
             public void onComplete(Task<AuthResult> task) {


                 Log.e("Account","User Created");
                 if(task.isSuccessful())
                 {
                     //createProfile(user,task);
                     success = true;
                 }


                 countDownLatch.countDown();
             }



         });


    try {
        countDownLatch.await();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    return success;

}

3 个答案:

答案 0 :(得分:0)

我曾经遇到过与您几乎相同的问题。我所做的是将OnCompleteListener替换为addOnSuccessListener,一切都解决了。

尝试使用此代码:

firebaseAuth.signInWithEmailAndPassword(user.getEmail(),user.getPassword())
      .addOnSuccessListener(LoginActivity.this, new OnSuccessListener<AuthResult>(){

                @Override
                public void onsuccess(@NonNull AuthResult authResult){
                     //try to run something in here
                }
             });

希望这也能解决您的问题。

答案 1 :(得分:0)

您现在无法返回尚未加载的内容。换句话说,您不能简单地在success方法之外返回onComplete()布尔变量,因为由于该方法的异步行为,它将始终保留默认值false。这意味着,当您尝试返回该结果时,数据尚未从数据库中完成加载,因此无法访问。这就是为什么要保留false的初始值,而又 true保持初始值的原因。

对此问题的快速解决方案是仅在success方法内使用与您的onComplete()变量相关的逻辑,否则我建议您从此看我的答案的最后一部分post ,其中我解释了如何使用自定义回调来完成。您也可以查看此 video 以获得更好的理解。

答案 2 :(得分:0)

遇到了同样的问题,原来我是在onComplete结束之前更改活动。 如果要更改活动(例如,在成功签名后转到仪表板活动),请确保在onComplete任务成功内调用startActivity(intent)