我正在创建一个FirebaseDAO
来执行和处理Firebase的主要问题以及我如何处理问题并向用户显示我尝试使用throw传递异常,但即使我尝试注册用短密码或电子邮件密码的用户我重复他没有启动Exception。
我的错误在哪里,有人可以帮助我吗?
public class FirebaseDAO {
private FirebaseAuth mFirebaseAuth;
private Task<AuthResult> authResultTask = null;
public void cadastrarUsuarioAuth(final Usuario usuario) throws FirebaseAuthWeakPasswordException, FirebaseAuthUserCollisionException {
mFirebaseAuth = ConfigurationFirebase.getFirebaseAuth();
try{
authResultTask = mFirebaseAuth.createUserWithEmailAndPassword(usuario.getEmail(), usuario.getSenha());
}catch (Exception e){
e.printStackTrace();
if(!authResultTask.isSuccessful() || !authResultTask.isComplete()){
if (authResultTask.getException()!=null){
String tException = authResultTask.getException().getClass().toString();
if(tException.equalsIgnoreCase(FirebaseAuthWeakPasswordException.class.toString())){
FirebaseAuthWeakPasswordException eWeakPassword = (FirebaseAuthWeakPasswordException)authResultTask.getException();
throw eWeakPassword;
}
if(tException.equalsIgnoreCase(FirebaseAuthUserCollisionException.class.toString())){
FirebaseAuthUserCollisionException eCollision = (FirebaseAuthUserCollisionException)authResultTask.getException();
throw eCollision;
}
}
}
}
}
答案 0 :(得分:0)
此代码根本不会按预期方式运行。
首先,createUserWithEmailAndPassword
是异步的,这意味着它会立即返回Task对象。您必须向该任务添加侦听器才能找到结果。你不能只是想知道发生了什么。
其次,在您附加到任务的侦听器内部,您将无法抛出将在封闭方法中捕获的异常。封闭方法将在没有waitint的情况下立即返回createUserWithEmailAndPassword
来完成。
您必须使代码适应异步编程风格。您可以阅读有关in this article的更多信息。
答案 1 :(得分:0)
显然我将不得不使用带有多个接口的MVP !!!
public class FirebaseDAO {
private FirebaseAuth mFirebaseAuth;
private DatabaseReference mDatabaseReference;
private Task<AuthResult> authResultTask = null;
private Presenter mPresenter;
public void cadastrarUsuarioAuth(final Usuario usuario) {
mFirebaseAuth = ConfigurationFirebase.getFirebaseAuth();
authResultTask = mFirebaseAuth.createUserWithEmailAndPassword(usuario.getEmail(), usuario.getSenha());
authResultTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
if(e.getClass().toString().equalsIgnoreCase(FirebaseAuthWeakPasswordException.class.toString())){
presenter.BlaBlaBla(R.string.error_weak_password); //At present I invoke to call a view.showDialog
}
}
});
}