Android+SQLiteOpenHelper实现登录记住密码小案例

实现自动登录,在数据库中存 注册的账号信息

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>

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小土嘿嘿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值