实现自动登录,在数据库中存 注册的账号信息
package com.example.databases_text;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.List;
import com.example.databases_text.LoginUse.LoginDBHelper;
import com.example.databases_text.LoginUse.LoginUser;
public class MainActivity extends AppCompatActivity implements View.OnClickListener ,View.OnFocusChangeListener{
private EditText edit_name;
private EditText edit_password;
private CheckBox cb_password;
private LoginDBHelper loginDBHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit_password=findViewById(R.id.et_pws);
edit_name=findViewById(R.id.et_name);
cb_password=findViewById(R.id.cb_password);
findViewById(R.id.btn_register).setOnClickListener(this);
findViewById(R.id.btn_login).setOnClickListener(this);
edit_password.setOnFocusChangeListener(this);
}
@Override
protected void onStart() {
super.onStart();
//获得数据库帮助器实例
loginDBHelper = LoginDBHelper.getInstance(this);
loginDBHelper.openWriteLink();//打开数据库
loginDBHelper.openReadLink();
reload();
}
@Override
protected void onStop() {
super.onStop();
loginDBHelper.closeLink();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
public void onClick(View view) {
LoginUser user = new LoginUser();
String name=edit_name.getText().toString();
String psw=edit_password.getText().toString();
boolean cb_check=cb_password.isChecked();
user.setName(name);
user.setPassword(psw);
user.setRemeber(cb_check);
switch (view.getId()){
case R.id.btn_register:
if(TextUtils.isEmpty(name)|| TextUtils.isEmpty(psw)){
Toast.makeText(MainActivity.this,"密码或用户名为空",Toast.LENGTH_SHORT).show();
} else {
if (user.getName().equals(loginDBHelper.queryName(name))) {
Toast.makeText(this, "账号已存在", Toast.LENGTH_SHORT).show();
}else{
if (loginDBHelper.registerData(user) > 0)
Toast.makeText(this, "注册成功", Toast.LENGTH_SHORT).show();
}
}
break;
case R.id.btn_login:
user.setName(name);
user.setPassword(psw);
if(TextUtils.isEmpty(name)|| TextUtils.isEmpty(psw)){
Toast.makeText(MainActivity.this,"密码或用户名为空",Toast.LENGTH_SHORT).show();
}else {
List<LoginUser> userList = loginDBHelper.queryData(user);
if (userList != null &&userList.size() > 0){
String username = userList.get(0).getName();
String userPassword =userList.get(0).getPassword();
if (user.getName().equals(username) && user.getPassword().equals(userPassword)){
//注意,这里虽然都是String类型,不能直接用==来比较,因为是两个对象,比较的是地址值,
Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
loginDBHelper.saveDate(user);
}else{
Toast.makeText(this,"用户名或密码错误",Toast.LENGTH_SHORT).show();
edit_password.setText("");
}
}else{
Toast.makeText(this,"用户名或密码错误",Toast.LENGTH_SHORT).show();
}
}
break;
}
}
public void reload(){
LoginUser loginreload=loginDBHelper.reloadDate();
if(loginreload!=null && loginreload.isRemeber()){
edit_name.setText(loginreload.getName());
edit_password.setText(loginreload.getPassword());
cb_password.setChecked(loginreload.isRemeber());
}else {
edit_name.setText("");
edit_password.setText("");
cb_password.setChecked(false);
}
}
@Override
public void onFocusChange(View view, boolean b) {
if(view.getId()==R.id.et_pws && b){
String x=loginDBHelper.queryPassword(edit_name.getText().toString());
edit_password.setText(x);
}
}
}
package com.example.databases_text.LoginUse;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
import com.example.databases_text.User.User;
public class LoginDBHelper extends SQLiteOpenHelper {
// 数据库版本号
public static final int DATABASE_VERSION = 2;
// 数据库名称
public static final String DATABASE_NAME = "text.db";
// 用户表名
public static final String TABLE_NAME = "login";
// 用户名
public static final String COLUMN_NAME = "name";
public static final String COLUMN_ID = "id";
// 用户密码
public static final String COLUMN_PASSWORD = "password";
private static LoginDBHelper instance=null;
private SQLiteDatabase mRDB=null;
private SQLiteDatabase mWDB=null;
public LoginDBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
//利用单例模式,获取数据库的唯一实例,当数据库不存在的时候,经行创建,如果已存在就直接返回
public static LoginDBHelper getInstance(Context context){
if(instance==null){
instance=new LoginDBHelper(context);
}
return instance;
}
//打开数据库的读连接
public SQLiteDatabase openReadLink(){
if(mRDB==null || !mRDB.isOpen()) {
mRDB = instance.getReadableDatabase();
}
return mRDB;
}
//打开数据库的写连接
public SQLiteDatabase openWriteLink(){
if(mWDB==null || !mWDB.isOpen()) {
mWDB = instance.getReadableDatabase();
}
return mWDB;
}
//数据库的关闭操作
public void closeLink() {
if (mRDB != null && mRDB.isOpen()) {
mRDB.close();
mRDB = null;
}
if (mWDB != null && mWDB.isOpen()) {
mWDB.close();
mWDB = null;//置为空为了回收
}
}
//创建数据库,执行sql语句
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String sql = "create table if not exists " + TABLE_NAME
+ " ("+"id integer primary Key AUTOINCREMENT not null ," +
"name VARCHAR not null,"+
"password VARCHAR not null,"+
"remeber INTEGER not null);"
;
sqLiteDatabase.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
//添加数据到数据库
public long registerData(LoginUser user){
ContentValues values = new ContentValues();
values.put("name", user.getName());
values.put("pasword", user.getPassword());
values.put("remeber", user.isRemeber());
return mWDB.insert(TABLE_NAME,null,values);
}
public long deleteData(LoginUser user){
//删除所有的
return mWDB.delete(TABLE_NAME,"name=? and pasword=?",new String[]{user.getName(),user.getPassword()});
}
public long updateData(LoginUser user){
ContentValues values = new ContentValues();
values.put("name", user.getName());
values.put("password", user.getPassword());
values.put("remeber", user.isRemeber());
//更改所有符合条件的数据
return mWDB.update(TABLE_NAME,values,"name=? ",new String[]{user.getName()});
}
public List<LoginUser> queryData(LoginUser user){
List<LoginUser> list = new ArrayList<>();
//查询所有数据,得到游标
Cursor cursor =mWDB.query(TABLE_NAME,null,"name=? and pasword=?",new String[]{user.getName(),user.getPassword()},null,null,null);
//逐个取出游标指向的数据
while (cursor.moveToNext()){
LoginUser user1=new LoginUser();
user1.setName(cursor.getString(1));
user1.setPassword(cursor.getString(2));
list.add(user1);
}
return list;
}
public String queryPassword(String name){
String cursor_password=null;
//查询所有数据,得到游标
Cursor cursor =mWDB.query(TABLE_NAME,null,"name=? and remeber=1 ",new String[]{name},null,null,null);
//逐个取出游标指向的数据
while (cursor.moveToNext()){
cursor_password=cursor.getString(2);
}
//取出游标指向的数据
return cursor_password;
}
public String queryName(String name){
String cuesor_name=null;
//查询所有数据,得到游标
Cursor cursor =mWDB.query(TABLE_NAME,null,"name=? ",new String[]{name},null,null,null);
//逐个取出游标指向的数据
while (cursor.moveToNext()){
cuesor_name=cursor.getString(1);
}
//取出游标指向的数据
return cuesor_name;
}
//获取追后的数据
public LoginUser reloadDate(){
LoginUser loginreload=new LoginUser();
String sql="select * FROM "+TABLE_NAME+" ORDER BY id DESC limit 1";
Cursor cursor= mRDB.rawQuery(sql,null);
if(cursor.moveToNext()) {
loginreload.setId(cursor.getInt(0));
loginreload.setName(cursor.getString(1));
loginreload.setPassword(cursor.getString(2));
boolean result = cursor.getInt(3) != 0;
Log.d("TAG", "reloadDate: "+result);
loginreload.setRemeber(result);
}
return loginreload;
}
public void saveDate(LoginUser loginUser){
/**
* 事物:若事件没有按照正确的逻辑进行,则整件事情直接失败
*/
try{
mWDB.beginTransaction();//事物开始时的标志性
//进行一系列操作
deleteData(loginUser);
registerData(loginUser);
mWDB.setTransactionSuccessful();//若一切正常,则设置事物成功的标准吗,若不正常,则不提交
}catch (Exception e){
e.printStackTrace();
}finally {
mWDB.endTransaction();//无论是否成功,结束事物
}
}
}
package com.example.databases_text.LoginUse;
public class LoginUser {
private int id;
private String name;
private String password;
private boolean remeber=false;
public LoginUser() {
}
public LoginUser(String name, String password, boolean remeber) {
this.name = name;
this.password = password;
this.remeber = remeber;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isRemeber() {
return remeber;
}
public void setRemeber(boolean remeber) {
this.remeber = remeber;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="用户名"/>
<EditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="密码"/>
<EditText
android:id="@+id/et_pws"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<CheckBox
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="记住密码"
android:id="@+id/cb_password"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="注册"
android:id="@+id/btn_register"
/>
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="登录"
android:id="@+id/btn_login"
/>
</LinearLayout>
</LinearLayout>