Я пытаюсь внедрить проверку подлинности Firebase для приложения для Android и получаю сообщение об ошибке.Я новичок в Android и, в лучшем случае, новичок в Java, поэтому я уверен, что мне не хватает чего-то простого.Любые предложения / советы очень ценятся!
Вот моя база кода:
public class LoginActivity extends AppCompatActivity {
private static final String TAG = "LoginActivity";
//Firebase
private FirebaseAuth mAuth;
private Context mContext;
private ProgressBar mProgressBar;
private EditText mEmail, mPassword;
private TextView mPleaseWait;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
mPleaseWait = (TextView) findViewById(R.id.pleaseWait);
mEmail = (EditText)findViewById(R.id.input_email);
mPassword = (EditText) findViewById(R.id.input_password);
mContext = LoginActivity.this;
Log.d(TAG, "onCreate: Login started.");
mPleaseWait.setVisibility(View.GONE);
mProgressBar.setVisibility(View.GONE);
}
private boolean isStringNull(String string){
Log.d(TAG, "isStringNull: checking if null.");
if(string.equals("")){
return true;
}else {
return false;
}
}
/**
* FireBase Code
*
*/
private void init(){
//initialize the button for logging in
Button btnLogin = (Button) findViewById(R.id.btn_login);
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d(TAG, "onClick: attempting to login. ");
String email = mEmail.getText().toString();
String password = mPassword.getText().toString();
if (isStringNull(email) && isStringNull(password)){
Toast.makeText(mContext, "You must fill out all fields.", Toast.LENGTH_SHORT).show();
}else{
mProgressBar.setVisibility(View.VISIBLE);
mPleaseWait.setVisibility(View.VISIBLE);
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "signInWithEmail:success");
FirebaseUser currentUser = mAuth.getCurrentUser();
updateUI(currentUser);
} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithEmail:failure", task.getException());
Toast.makeText(LoginActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
updateUI(null);
}
}
});
}
}
});
}
/**
* Checks to see if the @param 'user' is logged in.
*/
private void updateUI(FirebaseUser currentUser) {
Log.d(TAG, "updateUI: checking if user is logged in.");
if(currentUser == null){
Intent intent = new Intent(mContext, LoginActivity.class);
startActivity(intent);
}
}
@Override
public void onStart() {
Log.d(TAG, "onStart: Starting LoginActivity onStart method.");
super.onStart();
// Check if user is signed in (non-null) and update UI accordingly.
FirebaseUser currentUser = mAuth.getCurrentUser();
updateUI(currentUser);
if(currentUser != null){
Log.d(TAG, "onStart:signed_in. " + currentUser);
}else{
Log.d(TAG, "onStart:signed_out. ");
}
}
}
Когда я запускаю код, я получаю следующее сообщение об ошибке:
D / LoginActivity: onCreate: вход в систему начался.onStart: запуск метода onStart для входа в систему.D / AndroidRuntime: завершение работы виртуальной машины ....... java.lang.NullPointerException: попытка вызвать виртуальный метод com.google.firebase.auth.FirebaseUser com.google.firebase.auth.FirebaseAuth.getCurrentUser () 'onнулевая ссылка на объект