package com.example.myapplication;
import android.content.ContentValues;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Build;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
//登录页面,主要包含:
//用户登录验证、
//记住密码功能、
//自动填充密码、
//登录状态保存、
//登录历史记录
public class MainActivity extends AppCompatActivity {
//声明UI组件变量
private EditText main_Username,main_Password;
private TextView main_Forgetpassword,main_Register;
private Button btn_Login;
private CheckBox cb_Rememberpassword;
private UserDatabase userDb;
private SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
userDb=new UserDatabase(this);
sharedPreferences=getSharedPreferences("login_pref",MODE_PRIVATE);
//检查是否已登录,如果已登录,直接跳转到主页并结束当前Activity
boolean isLoggedIn=sharedPreferences.getBoolean("isLoggedIn",false);
if(isLoggedIn){
String username=sharedPreferences.getString("username","");
Intent intent=new Intent(MainActivity.this, HomeActivity.class);
intent.putExtra("username",username);
startActivity(intent);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
finish();
return;
}
//初始化UI组件
main_Username=findViewById(R.id.main_Username);
main_Password=findViewById(R.id.main_Password);
main_Forgetpassword=findViewById(R.id.main_Forgetpassword);
main_Register=findViewById(R.id.main_Register);
cb_Rememberpassword=findViewById(R.id.cb_Rememberpassword);
btn_Login=findViewById(R.id.btn_Login);
main_Register=findViewById(R.id.main_Register);
//登录按钮点击事件
btn_Login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loginUser();
}
});
//忘记密码点击事件
main_Forgetpassword.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"请联系管理员重置密码",Toast.LENGTH_SHORT).show();
}
});
//立即注册点击事件
main_Register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this, RegisterActivity.class);
startActivity(intent);
}
});
//为账号输入框添加文本变化监听器
main_Username.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) {
if(cb_Rememberpassword.isChecked()){
String username=main_Username.getText().toString().trim();
if(!TextUtils.isEmpty(username)){
fillPassword(username);
}
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
}
//自动填充密码
private void fillPassword(String username){
SQLiteDatabase db=userDb.getReadableDatabase();
Cursor cursor=db.query(//查询账号对应的密码
UserDatabase.TABLE_USERS,
new String[]{UserDatabase.COLUMN_PASSWORD},
UserDatabase.COLUMN_USERNAME+"=?",
new String[]{username},
null,null,null
);
//如果查询到结果,填充到密码输入框
if(cursor != null && cursor.moveToFirst()){
String storedPassword=cursor.getString(cursor.getColumnIndexOrThrow(UserDatabase.COLUMN_PASSWORD));
main_Password.setText(storedPassword);
cursor.close();
}
db.close();
}
//检查记住密码状态,记住密码选框
private void checkRememberedPassword() {
boolean isRemembered=sharedPreferences.getBoolean("isRemembered",false);
if(isRemembered){
// String username=sharedPreferences.getString("username","");
// String password=sharedPreferences.getString("password","");
// main_Username.setText(username);
// main_Password.setText(password);
cb_Rememberpassword.setChecked(true);
}else{
cb_Rememberpassword.setChecked(false);
}
}
//用户登录方法,验证用户名和密码,登陆成功后跳转到主页
private void loginUser(){
String username=main_Username.getText().toString();
String password=main_Password.getText().toString();
boolean remembered=cb_Rememberpassword.isChecked();
if(TextUtils.isEmpty(username)){
Toast.makeText(this,"请输入用户名",Toast.LENGTH_SHORT).show();
return;
}
if(TextUtils.isEmpty(password)){
Toast.makeText(this,"请输入密码",Toast.LENGTH_SHORT).show();
return;
}
SQLiteDatabase db=userDb.getReadableDatabase();
Cursor cursor= db.query(//查询用户信息
UserDatabase.TABLE_USERS,
new String[]{UserDatabase.COLUMN_USER_ID,UserDatabase.COLUMN_PASSWORD},
UserDatabase.COLUMN_USERNAME+"=?",
new String[]{username},
null,null,null
);
if (cursor != null && cursor.moveToFirst()){
int userId=cursor.getInt(cursor.getColumnIndexOrThrow(UserDatabase.COLUMN_USER_ID));
String storedPassword=cursor.getString(cursor.getColumnIndexOrThrow(UserDatabase.COLUMN_PASSWORD));
cursor.close();
if(password.equals(storedPassword)){
Toast.makeText(this,"登录成功",Toast.LENGTH_SHORT).show();
saveLoginStatus(username,remembered,password);
recordLoginHistory(userId);
Intent intent=new Intent(MainActivity.this,HomeActivity.class);
intent.putExtra("username",username);
startActivity(intent);
finish();
}
else {
Toast.makeText(this,"密码错误",Toast.LENGTH_SHORT).show();
}
}
else{
if(cursor != null){
cursor.close();
}
Toast.makeText(this,"用户名不存在",Toast.LENGTH_SHORT).show();
}
db.close();
}
//保存登录状态方法
private void saveLoginStatus(String username, boolean remembered, String password) {
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.putBoolean("isLoggedIn",true);
editor.putString("username",username);
//检查是否记住密码
checkRememberedPassword();
//是否记住密码
if(remembered){
editor.putBoolean("isRemembered",true);
editor.putString("password",password);
}else {
editor.putBoolean("isRemembered",false);
editor.remove("password");
}
editor.apply();
}
//记录登录历史
private void recordLoginHistory(int userId) {
SQLiteDatabase db=userDb.getWritableDatabase();
ContentValues values=new ContentValues();
values.put(UserDatabase.COLUMN_USER_ID,userId);
values.put(UserDatabase.COLUMN_DEVICE_INFO, Build.MODEL);
db.insert(UserDatabase.TABLE_LOGIN_HISTORY,null,values);
db.close();
}
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode,resultCode,data);
if(requestCode ==1 && resultCode==RESULT_OK && data!=null){
String username=data.getStringExtra("username");
main_Username.setText(username);
}
}
@Override
protected void onDestroy(){
userDb.close();
super.onDestroy();
}
}为什么我的记住密码功能不实现