首页 > 解决方案 > 如何添加“记住我”复选框

问题描述

我有一个应用程序,用户需要登录并记住他们的登录信息,但对于我的生活,我无法弄清楚为什么它不起作用。我对 android 开发和 Java 还很陌生,我猜一些琐碎的事情对我来说完全陌生。如果您能帮我弄清楚为什么我的“记住我”复选框不起作用,那将不胜感激。谢谢!

登录活动


import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.SharedPreferences;
import android.opengl.Visibility;
import android.os.Bundle;
import android.util.Log;
import android.util.Patterns;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

public class LoginActivity extends AppCompatActivity {

    EditText email_login, password_login;
    Button button_register, button, button_regInstruktor;
    Button reg;
    CheckBox remember_me;

    private FirebaseAuth mAuth;


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

        email_login = findViewById(R.id.editText);
        password_login = findViewById(R.id.editText2);
        button_register = findViewById(R.id.button_prijava);
        button = findViewById(R.id.button);
        button_regInstruktor = findViewById(R.id.button_regInstruktor);
        reg = findViewById(R.id.reg);
        remember_me= findViewById(R.id.zapamti_me);


        SharedPreferences spf = getSharedPreferences("checkbox", MODE_PRIVATE);
        String checkbox = spf.getString("remember", "true");

        if(checkbox.equals("true")){
            Intent i = new Intent(LoginActivity.this, MainActivity.class);
            startActivity(i);
            Toast.makeText(LoginActivity.this, "Checked", Toast.LENGTH_SHORT).show();


        }
        else if(checkbox.equals("false")){
            Toast.makeText(LoginActivity.this, "Unchecked", Toast.LENGTH_SHORT).show();
        }


        mAuth = FirebaseAuth.getInstance();

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

        Button btn_register_instruktor;
        btn_register_instruktor = (Button) findViewById(R.id.button_regInstruktor);
        btn_register_instruktor.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent register_intent;
                register_intent = new Intent(LoginActivity.this, RegisterUserActivity.class);
                startActivity(register_intent);
            }
        });

        reg = findViewById(R.id.reg);
        reg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent_reg = new Intent (LoginActivity.this, RegisterKorisnikActivity.class);
                startActivity(intent_reg);
            }
        });

    }

    private void loginUser() {
        String email = email_login.getText().toString().trim();
        String password = password_login.getText().toString().trim();

        if (email.isEmpty()){
            email_login.setError("Email is required!");
            email_login.requestFocus();
            return;
        }
        if(!Patterns.EMAIL_ADDRESS.matcher(email).matches()){
            email_login.setError("Please enter valid email!");
            email_login.requestFocus();
            return;
        }
        if(password.isEmpty()){
            password_login.setError("Password is required!");
            password_login.requestFocus();
            return;
        }
        if(password.length()<6){
            password_login.setError("Minimal password length is 6 characters!");
            password_login.requestFocus();
            return;
        }


        mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if(task.isSuccessful()){
                   startActivity(new Intent(LoginActivity.this, MainActivity.class));
                }
                else{
                    Toast.makeText(LoginActivity.this, "Failed to login!", Toast.LENGTH_LONG).show();
                }

            }
        });



        remember_me.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {


                if(buttonView.isChecked()){
                    SharedPreferences spf = getSharedPreferences(
                            "checkbox", MODE_PRIVATE
                    );
                    SharedPreferences.Editor edit = spf.edit();
                    edit.putString("remember", "true");
                    edit.apply();
                    Toast.makeText(LoginActivity.this, "checkbox", Toast.LENGTH_SHORT).show();
                }
                else if(!buttonView.isChecked()){
                    SharedPreferences spf = getSharedPreferences(
                            "checkbox", MODE_PRIVATE
                    );
                    SharedPreferences.Editor edit = spf.edit();
                    edit.putString("remember", "false");
                    edit.apply();
                    Toast.makeText(LoginActivity.this, "checkbox unchecked", Toast.LENGTH_SHORT).show();
                }
            }

        });






    }



}```

Also sorry for the messy code!

标签: javaandroidfirebase

解决方案


如果您希望应用程序在关闭应用程序并重新打开后记住您的凭据,您可以使用SharedPreferences

前几天我这样做了,这是我的解决方案...

要保存凭据,请执行此操作

    private void savePreferences() {
    SharedPreferences settings = getSharedPreferences("Login",
            Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = settings.edit();

    if (remLoginCredentials = true) {
        editor.putString("Uname", email.getText().toString());
        editor.putString("Pass", password.getText().toString());
        editor.putString("Rem", String.valueOf(rememberLogin.isChecked()));
        editor.apply();
    } else {
        editor.putString("Rem", String.valueOf(rememberLogin.isChecked()));
        editor.apply();
    }
}

要加载凭据,您可以执行此操作。

    private void loadPreferences() {
    SharedPreferences settings = getSharedPreferences("Login",
            Context.MODE_PRIVATE);

    if (settings.getString("Rem", null).equals("true")) {
        email.setText(settings.getString("Uname", null));
        password.setText(settings.getString("Pass", null));
        rememberLogin.setChecked(true);
        remLoginCredentials = true;
    } else {
        email.setText("");
        password.setText("");
        rememberLogin.setChecked(false);
        remLoginCredentials = false;
    }
}

推荐阅读