猿问

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

我的主要活动中有这种方法,只有在确认用户帐户已成功创建后才能继续。当我单击确认时,我可以看到该帐户是在 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;


}


郎朗坤
浏览 158回答 3
3回答

一只甜甜圈

我曾经遇到过和你几乎一样的问题。我所做的就是替换OnCompleteListener为addOnSuccessListener,一切都解决了。尝试使用此代码:firebaseAuth.signInWithEmailAndPassword(user.getEmail(),user.getPassword())&nbsp; &nbsp; &nbsp; .addOnSuccessListener(LoginActivity.this, new OnSuccessListener<AuthResult>(){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onsuccess(@NonNull AuthResult authResult){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//try to run something in here&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;});希望这也能解决您的问题。

慕慕森

您现在无法退回尚未加载的内容。换句话说,您不能简单地success在方法之外返回布尔变量,因为由于此方法的异步行为,onComplete()它将始终保持默认值。false这意味着当您尝试返回该结果时,数据尚未从数据库中完成加载,这就是无法访问的原因。这就是为什么保持初始值false而不是&nbsp;true您预期的原因。解决此问题的一个快速方法是success仅在方法内部使用与变量相关的逻辑onComplete(),否则我建议您从这篇文章中查看我的答案的最后一部分,其中我已经解释了如何使用自定义回调来完成它。您也可以观看此视频以更好地理解。

守着一只汪

遇到了同样的问题,原来我在 onComplete 结束之前改变了活动。如果您正在更改活动(例如签名成功后转到仪表板活动),请确保在 onComplete 任务中调用 startActivity(intent) 成功)
随时随地看视频慕课网APP

相关分类

Java
我要回答