Использование FirebaseAuthListener, и он будет переходить к действиям с фрагментом, если нет пользователя, вошедшего в систему - PullRequest
0 голосов
/ 29 августа 2018

То, что я пытаюсь сделать здесь, - это когда я запускаю свой MainActivity с FirebaseAuthListener, и ни один пользователь не вошел в систему, он перейдет к главному фрагменту, а MainFragment для контейнера, который подключается к моему * 1004. * (это SignInFragment расширенный фрагмент). В общем, MainFragment расширен до AppCompatActivity.

На самом деле все работает, но моя проблема в том, что MainFragemnt пусто в моем эмуляторе, должно отображаться LoginFragment.

Вот мои коды: MainActivity класс

//Firebase
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;

private TextView mWelcome;
private Context mContext;

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

    mWelcome = findViewById(R.id.tvWelcome);

    setupFirebaseAuth();


}

/*
--------------------------------------Firebase-----------------------------------------
 */

private void getCurrentUser(FirebaseUser user){
    Log.d(TAG, "getCurrentUser: checking if user is logged in.");
    if (user == null){

        Intent intent = new Intent(this, MainFragment.class);
        startActivity(intent);
    }
}

private void setupFirebaseAuth(){
    Log.d(TAG, "setupFirebaseAuth: setting up firebase auth.");
    mAuth = FirebaseAuth.getInstance();
    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            //Check if the user is logged in
            FirebaseUser user = firebaseAuth.getCurrentUser();
            getCurrentUser(user);

            if (user != null){
                //User is signed in
                Log.d(TAG, "onAuthStateChanged: signed _in: " + user.getUid());
            } else {
                //User is signed out
                Log.d(TAG, "onAuthStateChanged: signed_out");
            }
        }
    };
}

@Override
protected void onStart() {
    super.onStart();
    mAuth.addAuthStateListener(mAuthListener);
}

@Override
protected void onStop() {
    super.onStop();
    if (mAuthListener != null){
        mAuth.removeAuthStateListener(mAuthListener);
    }
}

Мои коды для MainFragment:

public class MainFragment extends AppCompatActivity {

@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
    super.onCreate(savedInstanceState, persistentState);
    setContentView(R.layout.fragment_main);

    SignInFragment fragment = new SignInFragment();

    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.container, fragment, null).commit();

Мой код для SignInFragment:

public class SignInFragment extends Fragment {

private static final String TAG = "SignInFragment";

private TextView mEmail, mPassword, mForRegister;
private EditText eEmail, ePassword;
private Button btnLogin;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.signin_fragment,container,false);

    //TextView
    mEmail = view.findViewById(R.id.tvEmail);
    mPassword = view.findViewById(R.id.tvPassword);
    mForRegister = view.findViewById(R.id.tvForRegister);
    //EditText
    eEmail = view.findViewById(R.id.etEmail);
    ePassword = view.findViewById(R.id.etPassword);
    //Button
    btnLogin = view.findViewById(R.id.btnLogin);

    //Navigating to RegisterFragment
    mForRegister.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            FragmentTransaction fr = getFragmentManager().beginTransaction();
            fr.replace(R.id.container, new RegisterFragment());
            fr.commit();
        }
    });

    return view;
}

Это изображение эмулятора:

This is the picture of the emulator: Спасибо!

1 Ответ

0 голосов
/ 29 августа 2018

попробуйте изменить метод onCreate. используйте вместо этого следующее:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...