Как я могу исправить исключение нулевого указателя в Аутентификации Firebase? - PullRequest
0 голосов
/ 22 июня 2019

Мне нужна помощь с этим.Каждый раз, когда я запускаю приложение, оно просто зависало при каждом входе в систему.Пожалуйста, помогите, я застрял с этим.Я следовал многому учебнику, и я думаю, что код был таким же, но все еще получил исключение нулевого указателя.Я понятия не имею, как исправить этот нулевой указатель.

Logcat:

java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.firebase.auth.FirebaseAuth$AuthStateListener.onAuthStateChanged(com.google.firebase.auth.FirebaseAuth)' on a null object reference
    at com.google.firebase.auth.zzi.run(Unknown Source:2)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at com.google.android.gms.internal.firebase_auth.zzj.dispatchMessage(Unknown Source:6)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6718)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:495)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Мой код при входе в систему Активность:

public class Login extends AppCompatActivity {

    private FirebaseAuth mAuth;
    FirebaseAuth.AuthStateListener mAuthListner;

    Button btnlogin;
    TextView btndaftar;
    MaterialEditText mEmail, pass;

    @Override
    protected void onStart() {
        super.onStart();
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }

    private void updateUI(FirebaseUser currentUser) {
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        mAuth = FirebaseAuth.getInstance();

        mAuth.addAuthStateListener(mAuthListner);

        mAuthListner = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null) {
                    Intent intent = new Intent(Login.this, NavigationMenu.class);
                    startActivity(intent);
                    finish();
                }
            }
        };

        btnlogin=findViewById(R.id.btnLogin);
        mEmail=findViewById(R.id.edt_email);
        pass=findViewById(R.id.edt_pasword);
        btndaftar=findViewById(R.id.btnDaftar);

        btndaftar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent daftar = new Intent(Login.this, Daftar.class);
                startActivity(daftar);
            }
        });



        btnlogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String email = mEmail.getText().toString();
                String password = pass.getText().toString();

                mAuth.signInWithEmailAndPassword(email, password)
                        .addOnCompleteListener(Login.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
                                    Intent intent = new Intent(Login.this, NavigationMenu.class);
                                    startActivity(intent);
                                    finish();
                                    FirebaseUser currentUser = mAuth.getCurrentUser();
                                    updateUI(currentUser);
                                } else {
                                    // If sign in fails, display a message to the user.
                                    Toast.makeText(Login.this, "Login gagal !",
                                            Toast.LENGTH_SHORT).show();
                                    updateUI(null);
                                }
                            }
                        });
           }
        });
    }
}

Сразу после открытия приложения его просторазбился.есть идеи, почему это произошло?

Ответы [ 2 ]

0 голосов
/ 23 июня 2019
public class Login extends AppCompatActivity {

private FirebaseAuth mAuth;
FirebaseAuth.AuthStateListener mAuthListner;

Button btnlogin;
TextView btndaftar;
MaterialEditText mEmail, pass;

@Override
protected void onStart() {
    super.onStart();
    FirebaseUser currentUser = mAuth.getCurrentUser();
    updateUI(currentUser);

}

private void updateUI(FirebaseUser currentUser) {
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    mAuth = FirebaseAuth.getInstance();

    mAuthListner = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {
                Intent intent = new Intent(Login.this, NavigationMenu.class);
                startActivity(intent);
                finish();
            }
        }
    };

    mAuth.addAuthStateListener(mAuthListner);

    btnlogin=findViewById(R.id.btnLogin);
    mEmail=findViewById(R.id.edt_email);
    pass=findViewById(R.id.edt_pasword);
    btndaftar=findViewById(R.id.btnDaftar);

    btndaftar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent daftar = new Intent(Login.this, Daftar.class);
            startActivity(daftar);
        }
    });



    btnlogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String email = mEmail.getText().toString();
            String password = pass.getText().toString();

            mAuth.signInWithEmailAndPassword(email, password)
                    .addOnCompleteListener(Login.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
                                Intent intent = new Intent(Login.this, NavigationMenu.class);
                                startActivity(intent);
                                finish();
                                FirebaseUser currentUser = mAuth.getCurrentUser();
                                updateUI(currentUser);
                            } else {
                                // If sign in fails, display a message to the user.
                                Toast.makeText(Login.this, "Login gagal !",
                                        Toast.LENGTH_SHORT).show();
                                updateUI(null);
                            }
                        }
                    });
        }
    });
}

это мой код после переключения позиции

0 голосов
/ 22 июня 2019

Когда вы добавляете слушателя к методу addAuthStateListener() в onCreate(), у него еще нет значения, поэтому ваше приложение вылетает

, инициализирует mAuthListner перед добавлением к mAuth

Вам нужно инвертировать код следующим образом:

   // First create your listener instance
   mAuthListner = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null) {
                    Intent intent = new Intent(Login.this, NavigationMenu.class);
                    startActivity(intent);
                    finish();
                }
            }
        };

   // And so, add it to the addAuthStateListener() method
   mAuth.addAuthStateListener(mAuthListner);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...