单击按钮时,Firebase Auth登录和注册应用程序崩溃



我正在构建一个简单的firebase登录和注册应用程序。它包含三个活动,注册、登录和配置文件活动。我已经集成了Firebase,但当我点击"登录"或"注册"按钮时,应用程序会崩溃并出现错误。我浏览了整个论坛,寻找可能的解决方案,但找不到合适的解决方案来解决我的问题。如何解决此问题?

共享我的登录活动作为参考代码:-

public class LoginActivity extends AppCompatActivity {
//view binding
private ActivityLoginBinding binding;
//firebase auth
private FirebaseAuth firebaseAuth;
//progress dialog
private ProgressDialog progressDialog;
//actionBar
private ActionBar actionBar;
private String email="", password="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityLoginBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
//Configure action bar, title
actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setTitle("LogIn");
}
//Configure progress dialog
progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Please wait");
progressDialog.setMessage("Logging In");
progressDialog.setCanceledOnTouchOutside(false);
//Initialise firebase auth
firebaseAuth = FirebaseAuth.getInstance();
checkUser();

//if have account, SignUp
binding.haveAccountTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(LoginActivity.this ,SignUpActivity.class));
finish();
}
});
binding.loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
validateData();
}
});
}
private void checkUser() {
//check if user is already logged in
//get current user
//if already logged in, then open profile activity
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
if(firebaseUser != null){
//user is already logged in
startActivity(new Intent(this, ProfileActivity.class));
finish();
}
}
//Method 1 : Validate User Data
private void validateData() {
String email = binding.emailEt.getText().toString().trim();
String password = binding.passwordEt.getText().toString().trim();
if(TextUtils.isEmpty(email)){
binding.emailEt.setError("This field cannot be empty");
}
else if(!Patterns.EMAIL_ADDRESS.matcher(email).matches()){
binding.emailEt.setError("Invalid Email format");
}
else if(TextUtils.isEmpty(password)){
binding.passwordEt.setError("This field cannot be empty");
}
else if(password.length() < 6){
binding.passwordEt.setError("Password must be atleast 6 characters long");
}
else {
//data is valid. Now continue to firebase LogIn.
firebaseLogIn();
}
}
//Method 2 : Firebase Log in
private void firebaseLogIn(){
//show progress
progressDialog.show();
firebaseAuth.signInWithEmailAndPassword(email,password).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
//login success
progressDialog.dismiss();
//get user info
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
String email = null;
if (firebaseUser != null) {
email = firebaseUser.getEmail();
}
Toast.makeText(LoginActivity.this, "LoggedInn"+email, Toast.LENGTH_SHORT).show();
//open profile activity
startActivity(new Intent(LoginActivity.this, ProfileActivity.class));
finish();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
//login failed. get and show error message
progressDialog.dismiss();
Toast.makeText(LoginActivity.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}

还分享下面的日志:-

--------- beginning of crash
2022-01-27 09:48:19.063 4915-4915/com.jaswikventures.firebaseloginsignup E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.jaswikventures.firebaseloginsignup, PID: 4915
java.lang.IllegalArgumentException: Given String is empty or null
at com.google.android.gms.common.internal.Preconditions.checkNotEmpty(com.google.android.gms:play-services-basement@@18.0.0:2)
at com.google.firebase.auth.FirebaseAuth.signInWithEmailAndPassword(com.google.firebase:firebase-auth@@21.0.1:1)
at com.jaswikventures.firebaseloginsignup.LoginActivity.firebaseLogIn(LoginActivity.java:118)
at com.jaswikventures.firebaseloginsignup.LoginActivity.validateData(LoginActivity.java:109)
at com.jaswikventures.firebaseloginsignup.LoginActivity.access$000(LoginActivity.java:22)
at com.jaswikventures.firebaseloginsignup.LoginActivity$2.onClick(LoginActivity.java:72)
at android.view.View.performClick(View.java:7448)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1131)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
2022-01-27 09:48:19.065 530-3813/? W/ActivityTaskManager:   Force finishing activity com.jaswikventures.firebaseloginsignup/.LoginActivity

我认为用if语句覆盖下面的代码可以解决问题,但它没有起作用。

String email = null;
if (firebaseUser != null) {
email = firebaseUser.getEmail();
}

您已经在validateData 中将这些声明为本地

String email = binding.emailEt.getText().toString().trim();
String password = binding.passwordEt.getText().toString().trim();

当你呼叫时

firebaseAuth.signInWithEmailAndPassword(email,password)

它们是空的

相关内容

最新更新