Firebase的onComplete回调中调用Toast和跳转Intent失效问题
问题原因
你的报错和onComplete内的Toast没有任何关联,核心错误出在addOnCompleteListener方法的传参上:
你在View.OnClickListener的匿名内部类中调用addOnCompleteListener时,传入的第一个参数this指向的是当前的OnClickListener匿名实例,而Firebase的addOnCompleteListener可接受的首参数类型为LifecycleOwner(比如Activity、Fragment实例)或Executor,并不支持OnClickListener类型,因此直接触发编译错误,整个代码段都无法通过编译,所以看起来像是Toast相关代码无法修改、无法运行。
解决方法
修改addOnCompleteListener的首参数即可,两种方案二选一:
- 绑定Fragment生命周期,传入当前LoginFragment的实例:
mAuth.signInWithEmailAndPassword(email, password) // 把原来的this替换为LoginFragment.this .addOnCompleteListener(LoginFragment.this, new OnCompleteListener<AuthResult>() { // 剩余原有代码无需修改 @Override public void onComplete(@NonNull Task<AuthResult> task) { // ...原有逻辑 Toast.makeText(getActivity(), "Authentication failed.", Toast.LENGTH_SHORT).show(); } });
- 不需要绑定生命周期的话,直接省略第一个参数,只传
OnCompleteListener实例:
mAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { // 剩余原有代码无需修改 });
修改完成后原有Toast代码可以正常运行,无需额外调整。
内容的提问来源于stack exchange,提问作者Kalybor
相关产品推荐
相关产品推荐

