为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

郎朗坤 2022-06-23 19:38:04
我的主要活动中有这种方法,只有在确认用户帐户已成功创建后才能继续。当我单击确认时,我可以看到该帐户是在 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 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

我曾经遇到过和你几乎一样的问题。我所做的就是替换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

                }

             });

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


查看完整回答
反对 回复 2022-06-23
?
慕慕森

TA贡献1856条经验 获得超17个赞

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

解决此问题的一个快速方法是success仅在方法内部使用与变量相关的逻辑onComplete(),否则我建议您从这篇文章中查看我的答案的最后一部分,其中我已经解释了如何使用自定义回调来完成它。您也可以观看此视频以更好地理解。


查看完整回答
反对 回复 2022-06-23
?
守着一只汪

TA贡献1872条经验 获得超4个赞

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



查看完整回答
反对 回复 2022-06-23
  • 3 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号