java - 如何添加“记住我”复选框
问题描述
我有一个应用程序,用户需要登录并记住他们的登录信息,但对于我的生活,我无法弄清楚为什么它不起作用。我对 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!
解决方案
如果您希望应用程序在关闭应用程序并重新打开后记住您的凭据,您可以使用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;
}
}
推荐阅读
- android - 为什么 layout-sw600dp 不能在 Pixel C API 30 上运行?
- angular - 收到此错误的“用户”类型上不存在属性“名称”
- python - auto-py-to-exe 卡在加载模块钩子“hook-gevent.py”
- angular - 最佳实践 Angular HTTPOnly Cookies 和 RoleGuards
- r - R 与组一起变异和倒数
- flutter - 如何在 Flutter 中制作砌体布局?
- reactjs - 当我安装material-UI时,通过create-react-app构建的React(打字稿版本)应用程序中断
- regex - 正则表达式在一个部分中查找所有两个三个或四个大写单词
- javascript - 从本地存储切换两个类
- django - 出现在 Django 身份验证模板中的随机 TextNode