Держите пользователя авторизованным в Java Firebase - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь держать пользователя вошедшим в мое приложение чата даже после закрытия приложения.Таким образом, единственный способ, которым они выйдут из своей учетной записи, - это если они нажмут кнопку выхода из системы.

Пока пользователь остается в системе, но когда я нажимаю кнопку выхода, приложение вылетает.Это ошибка, которую я получаю

 Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' on a null object reference
    at com.example.chatterbox.ChatsFragment.onCreateView(ChatsFragment.java:54)

проблема в том, что эта ошибка из другого файла.Может кто-нибудь, пожалуйста, помогите мне?

public class LoginActivity extends AppCompatActivity {

private FirebaseAuth mAuth;
private ProgressDialog loadingBar;

private Button LoginButton ;
private EditText UserEmail, UserPassword;
private TextView NeedNewAccountLink, ForgetPasswordLink;

private DatabaseReference UsersRef;

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

    RelativeLayout relativeLayout = findViewById(R.id.layout);
    AnimationDrawable animationDrawable = (AnimationDrawable) relativeLayout.getBackground();
    animationDrawable.setEnterFadeDuration(5000);
    animationDrawable.setExitFadeDuration(5000);
    animationDrawable.start();

    mAuth = FirebaseAuth.getInstance();
    UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");

    InitializeFields();

    if (UsersRef != null) {

        Intent intent = new Intent(LoginActivity.this, MainActivity.class);
        startActivity(intent);
        finish();

    }

        NeedNewAccountLink.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                SendUserToRegisterActivity();

            }
        });


        LoginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                AllowUserToLogin();
            }
        });

    }

    private void AllowUserToLogin () {

        String email = UserEmail.getText().toString();
        String password = UserPassword.getText().toString();

        if (TextUtils.isEmpty(email)) {

            Toast.makeText(this, "Please enter your email", Toast.LENGTH_SHORT).show();
        }

        if (TextUtils.isEmpty(password)) {

            Toast.makeText(this, "Please enter your password", Toast.LENGTH_SHORT).show();
        } else {

            loadingBar.setTitle("Logging In");
            loadingBar.setMessage("Please wait...");
            loadingBar.setCanceledOnTouchOutside(true);
            loadingBar.show();

            mAuth.signInWithEmailAndPassword(email, password)
                    .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {

                            if (task.isSuccessful()) {

                                String currentUserId = mAuth.getCurrentUser().getUid();
                                String deviceToken = FirebaseInstanceId.getInstance().getToken();

                                UsersRef.child(currentUserId).child("device_token")
                                        .setValue(deviceToken)
                                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                                            @Override
                                            public void onComplete(@NonNull Task<Void> task) {

                                                if (task.isSuccessful()) {

                                                    SendUserToMainActivity();
                                                    Toast.makeText(LoginActivity.this, "Logged in successfully", Toast.LENGTH_SHORT).show();
                                                    loadingBar.dismiss();

                                                }
                                            }
                                        });
                            } else {

                                String message = task.getException().toString();
                                Toast.makeText(LoginActivity.this, "Error:" + message, Toast.LENGTH_SHORT).show();
                                loadingBar.dismiss();

                            }
                        }
                    });

        }

    }

    private void InitializeFields () {

        LoginButton = (Button) findViewById(R.id.login_button);
        UserEmail = (EditText) findViewById(R.id.login_email);
        UserPassword = (EditText) findViewById(R.id.login_password);
        NeedNewAccountLink = (TextView) findViewById(R.id.need_new_account_link);
        ForgetPasswordLink = (TextView) findViewById(R.id.forget_password_link);
        loadingBar = new ProgressDialog(this);

    }

    private void SendUserToMainActivity () {

        Intent mainIntent = new Intent(LoginActivity.this, MainActivity.class);
        mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(mainIntent);
        finish();
    }
    private void SendUserToRegisterActivity () {

        Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class);
        startActivity(registerIntent);
    }

Строка ошибки:

    currentUserID = mAuth.getCurrentUser().getUid();

Вот как я проверяю, вошел ли пользователь в систему. Если это так, я отправляю его в MainActivity.Если они не они остаются на LoginActivity

if (UsersRef != null) {

        Intent intent = new Intent(LoginActivity.this, MainActivity.class);
        startActivity(intent);
        finish();

    }

Ответы [ 2 ]

0 голосов
/ 19 мая 2019

Звоните

mAuth = FirebaseAuth.getInstance();
UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");

, а затем

if (UsersRef != null) {
  //do something
}

Это немного странно, потому что вам нужно знать, есть ли в настоящее время действительный пользователь, вошедший в Firebase. Этот фрагмент может быть полезен:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
// User is signed in
} else {
// No user is signed in
}

Но вы проверяете, является ли переменная UsersRef (то есть DatabaseReference, я полагаю) нулевой или нет ... Действительно, вы просто дали ей значение !!!

0 голосов
/ 18 мая 2019

Используйте addOnSuccessListener вместо addOnCompleteListener

auth.signInWithEmailAndPassword(mEmail, mPassword)
          .addOnSuccessListener(LoginActivity.this, new OnSuccessListener<AuthResult>(){

                    @Override
                    public void onsuccess(@NonNull AuthResult authResult){
                         //your code goes here
                    }
                 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...