Я разрабатываю простое приложение, которое требует от пользователя регистрации для входа в приложение. Я использую firebase в качестве базы данных. Приложение загружается, как ожидалось, и отображается правильно, но как только я ввожу необходимые регистрационные данные вместо загрузки данных в firebase и загрузки страницы входа, приложение вылетает.
Глядя на Logcat, кажется, что у меня есть память утечка или я нарушаю правила конфиденциальности, однако, будучи относительно новичком в этом, я не совсем уверен, где я ошибаюсь.
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.FirebaseApp;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
public class MainActivity extends AppCompatActivity {
private EditText userEmail, userPassword;
private Button register;
private TextView login;
private FirebaseAuth firebaseAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupUiViews();
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (validate()){
// Upload data to the database.
String user_email = userEmail.getText().toString().trim();
String user_password = userPassword.getText().toString().trim();
firebaseAuth.createUserWithEmailAndPassword(user_email, user_password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()){
Toast.makeText(MainActivity.this, "Registration Successful!", Toast.LENGTH_SHORT).show();
startActivity(new Intent(MainActivity.this, Login.class));
} else {
Toast.makeText(MainActivity.this, "Registration Failed!", Toast.LENGTH_SHORT).show();
}
}
});
}
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Login.class));
}
});
}
});
}
private void setupUiViews(){
userEmail = (EditText) findViewById(R.id.etEmail);
userPassword = (EditText) findViewById(R.id.etPassword);
register = (Button) findViewById(R.id.btnRegister);
login = (TextView) findViewById(R.id.tvRegistered);
}
private boolean validate(){
boolean result = false;
String email = userEmail.getText().toString();
String password = userPassword.getText().toString();
if (email.isEmpty() && password.isEmpty()){
Toast.makeText(this, "Please enter all details", Toast.LENGTH_SHORT).show();
} else {
result = true;
}
return result;
}
}
В соответствии с запросом Logcat ниже:
2020-05-28 12:56:32.695 5462-5462/com.devops.ignite E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.devops.ignite, PID: 5462
java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.tasks.Task com.google.firebase.auth.FirebaseAuth.createUserWithEmailAndPassword(java.lang.String, java.lang.String)' on a null object reference
at com.shayledevops.ignite.MainActivity$1.onClick(MainActivity.java:42)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)