繁体   English   中英

关闭后无法在退出的应用程序中保持登录

[英]Cannot keep login in the app exiting after shutting it down

我的应用程序有问题,它要求我在每次冷启动时登录。 我该如何解决这个问题请在下面找到片段的代码

public class SinginFragment extends Fragment {


    public SinginFragment() {
        // Required empty public constructor
    }

    private TextView dontHaveAnAccount;
    private FrameLayout parentFrameLayout;

    private EditText email;
    private EditText password;

    private TextView forgotPassword;

    private ProgressBar progressBar;

    private TextView closeBtn;
    private Button signInBtn;

    // private SharedPreferences preferences;
    private FirebaseAuth firebaseAuth;
    private FirebaseFirestore firebaseFirestore;
    private String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+.[a-z]+";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_singin, container, false);
        dontHaveAnAccount = view.findViewById(R.id.tv_dont_hava_an_account);
        parentFrameLayout = getActivity().findViewById(R.id.register_framelayout);

        forgotPassword = view.findViewById(R.id.sign_in_forgot_password);

        email = view.findViewById(R.id.sign_in_email);
        password = view.findViewById(R.id.sign_in_password);

        progressBar = view.findViewById(R.id.sign_in_progresbar);

        closeBtn = view.findViewById(R.id.sign_in_close_btn);
        signInBtn = view.findViewById(R.id.sign_in_btn);

        firebaseAuth = FirebaseAuth.getInstance();

        return view;

    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        dontHaveAnAccount.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setFragment(new SignupFragment());
            }
        });

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

                RegisterActivity.onResetPasswordFragment = true;
                setFragment(new ResetPasswordFragment());
            }
        });

        closeBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mainIntent();
            }
        });

        email.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                checkInputs();
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

        password.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

                checkInputs();
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

        signInBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                checkEmailAndPassword();
            }
        });

    }


    private void setFragment(Fragment fragment) {
        FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
        fragmentTransaction.setCustomAnimations(R.anim.slide_from_right,R.anim.slideout_from_left);
        fragmentTransaction.replace(parentFrameLayout.getId(),fragment);
        fragmentTransaction.commit();
    }

    private void checkInputs() {
        if (!TextUtils.isEmpty(email.getText())){
            if (!TextUtils.isEmpty(password.getText())){
                signInBtn.setEnabled(true);
                signInBtn.setTextColor(Color.rgb(255,255,255));
            }else {
                signInBtn.setEnabled(false);
                signInBtn.setTextColor(Color.argb(50,255,255,255));
            }
        }else {
            signInBtn.setEnabled(false);
            signInBtn.setTextColor(Color.argb(50,255,255,255));
        }
    }

    private void checkEmailAndPassword(){
        if (email.getText().toString().matches(emailPattern)){
            if (password.length() >=8){
                progressBar.setVisibility(View.VISIBLE);
                signInBtn.setEnabled(false);
                signInBtn.setTextColor(Color.argb(50,255,255,255));

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

                                if (task.isSuccessful()){
                                    // if (firebaseAuth != null){

                                    mainIntent();
                                }else {
                                    progressBar.setVisibility(View.INVISIBLE);
                                    signInBtn.setEnabled(false);
                                    signInBtn.setTextColor(Color.rgb(255,255,255));
                                    String error = task.getException().getMessage();
                                    Toast.makeText(getActivity(), error, Toast.LENGTH_SHORT).show();
                                }
                            /* }else{
                                 Toast.makeText(getActivity(), "Incorrect email or password",Toast.LENGTH_SHORT).show();
                             }
                             */
                          }
                        });

            }else{
                Toast.makeText(getActivity(), "Incorrect email or password",Toast.LENGTH_SHORT).show();
            }
        }else {
            Toast.makeText(getActivity(), "Incorrect email or password",Toast.LENGTH_SHORT).show();
        }
      }

    private void mainIntent(){
            Intent mainIntent = new Intent(getActivity(), MainActivity.class);
            startActivity(mainIntent);
            getActivity().finish();

    }
} 

下面在我的第二个用例中:我尝试了两种方式的代码,但仍然有同样的问题

public class loginActivity extends AppCompatActivity {

    public AdView mAdView;


    EditText emailBox, passwordBox;
    TextView forgetPassword;

    ImageView loginAc;
    ImageView createAc;

    ImageView donationAc1;

    FirebaseAuth auth;

    FirebaseUser currentUser;

    ProgressDialog dialog;



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


        mAdView = findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);

        getSupportActionBar().hide();

        dialog = new ProgressDialog(this);
        dialog.setMessage("Please wait...");
        auth = FirebaseAuth.getInstance();

        emailBox = findViewById(R.id.emailBox);
        passwordBox = findViewById(R.id.passwordBox);
        forgetPassword = findViewById(R.id.forgotPass);

        loginAc = findViewById(R.id.loginIm);
        createAc = findViewById(R.id.creatIm);

        donationAc1 = findViewById(R.id.donationIcons1);

        currentUser = auth.getCurrentUser();

        loginAc.setOnClickListener(v -> {
              dialog.show();
              String email, password;
              email = emailBox.getText().toString();
              password = passwordBox.getText().toString();

          auth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
              @Override
              public void onComplete(@NonNull Task<AuthResult> task) {
                  // dialog.dismiss();
                  if (task.isSuccessful()) {
                      ///////////////////
                      if (auth != null) {
                          startActivity(new Intent(loginActivity.this, DashboardActivity.class));
                      }else {
                         //  dialog.dismiss();
                          Toast.makeText(loginActivity.this, "Wrong enter or you not have account yet.", Toast.LENGTH_SHORT).show();
                      }
                      /////////////////
                  }
                  else {
                      // dialog.dismiss();
                      Toast.makeText(loginActivity.this, "Wrong enter or you not have account yet.",Toast.LENGTH_SHORT).show();
                     }
              }

          });

      });


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

                final EditText resetPassword = new EditText(v.getContext());
                final AlertDialog.Builder passwordResetDialog = new AlertDialog.Builder(v.getContext());
                passwordResetDialog.setTitle("Reset Password ?");
                passwordResetDialog.setMessage("Enter Your Email.");
                passwordResetDialog.setView(resetPassword);

                passwordResetDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // extract the email and send reset link
                        String newPassword = resetPassword.getText().toString();
                        auth.sendPasswordResetEmail(newPassword).addOnSuccessListener(new OnSuccessListener<Void>() {
                            @Override
                            public void onSuccess(Void aVoid) {
                                Toast.makeText(loginActivity.this, "Password Reset Successfully.", Toast.LENGTH_SHORT).show();
                            }
                        }).addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                Toast.makeText(loginActivity.this, "Password Reset Failed.", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }
                });
                passwordResetDialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // close
                    }
                });

                passwordResetDialog.create().show();
            }
        });



        createAc.setOnClickListener((v) -> {
            startActivity(new Intent(loginActivity.this, singupActivity.class));
        });


        donationAc1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent donationIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.paypal.me/igoldday"));
                startActivity(donationIntent);
            }
        });


    }
} 

任何人都可以帮我解决这个问题。

这是一个示例代码,我用来检查我的启动屏幕上是否有当前用户登录。 你可以使用它

       FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
       if (user != null) {
        if (Objects.requireNonNull(mAuth.getCurrentUser()).isEmailVerified()) 
        {

            // User is signed in
            startActivity(new Intent(Splash.this,MainActivity.class));
        
        }
    } else {
        // User is signed out
        startActivity(new Intent(Splash.this,LoginActivity.class));
        finish();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM