3 回答

TA贡献1789条经验 获得超8个赞
signInWithEmailAndPassword
是异步的,并立即返回一个跟踪正在进行的工作的 Task 对象。这意味着LogIn
也立即返回初始值success
。一段时间后,只要数据准备好,就会调用 Task 上的完成侦听器。这就是您应该处理登录结果的地方。
您正在尝试将异步方法转换为同步方法。这不是一个好主意。使用监听器来处理结果。您不能从该侦听器中传递值。

TA贡献1719条经验 获得超6个赞
您可以在这里使用 AtomicBoolean 作为 final 在内部类中使用,但由于该函数是异步的,LogIn 返回值设置不正确,您必须更改处理登录请求的方式。

TA贡献1776条经验 获得超12个赞
错误是如果您在匿名内部类中使用局部变量,则无法更改 java 中匿名内部类中局部变量的状态,这些局部变量将被视为最终变量。在您的情况下,布尔成功是 logIn 方法中的局部变量,它被视为最终变量,您不能在匿名内部类中重新分配它。
在你的情况下认为这会有所帮助
public boolean LogIn(String email, String password) { StringBuffer buffer = new StringBuffer("") : firebaseAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { if (task.isSuccessful()) { buffer.append("true") ; } else { buffer.append("false") ; } } }); 返回缓冲区。字符串()。等于(“真”);}
添加回答
举报