美文网首页
SQLife实现记住密码功能

SQLife实现记住密码功能

作者: 古早味蛋糕 | 来源:发表于2022-08-20 11:12 被阅读0次

记住密码功能需求分析:先输入手机号码,然后根据手机号码匹配保存的密码,一个手机号码对应一个密码,从而实现具体手机号码的密码记忆功能。现在运用数据库技术分条存储各用户的登录信息,并支持根据手机号查找登录信息,从而同时记住多个手机号的密码。
(1)声明一个数据库的帮助器对象,然后在活动页面的onResume方法中打开数据库连接,在onPasue方法中关闭数据库连接,示例代码如下:


1.png

(2)登录成功时,如果用户勾选了“记住密码”,就将手机号码及其密码保存至数据库。也就是在loginSuccess方法中增加如下代码:


2.png

(3)再次打开登录页面,用户输入手机号再点击密码框的时候,根据光标切到密码框触发焦点变更事件,获得密码,具体处理逻辑要求重写监听器的onFocusChange方法,重写后的方法代码如下所示:


3.png

App,先打开登录页面,勾选“记住密码”,并确保本次登录成功。然后再次进入登录页面,输入手机号码后光标还停留在手机框,如图所示:


4.png

其中LoginDBHelper的实现代码如下:

public class LoginDBHelper extends SQLiteOpenHelper {

  private static final String DB_NAME = "login.db";
  private static final String TABLE_NAME = "login_info";
  private static final int DB_VERSION = 1;
  private static LoginDBHelper mHelper = null;
  private SQLiteDatabase mRDB = null;
  private SQLiteDatabase mWDB = null;

  private LoginDBHelper(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
  }

  // 利用单例模式获取数据库帮助器的唯一实例
  public static LoginDBHelper getInstance(Context context) {
     if (mHelper == null) {
         mHelper = new LoginDBHelper(context);
     }
     return mHelper;
  }

  // 打开数据库的读连接
  public SQLiteDatabase openReadLink() {
     if (mRDB == null || !mRDB.isOpen()) {
         mRDB = mHelper.getReadableDatabase();
     }
     return mRDB;
  }

  // 打开数据库的写连接
  public SQLiteDatabase openWriteLink() {
     if (mWDB == null || !mWDB.isOpen()) {
         mWDB = mHelper.getWritableDatabase();
     }
     return mWDB;
 }

  // 关闭数据库连接
  public void closeLink() {
     if (mRDB != null && mRDB.isOpen()) {
         mRDB.close();
         mRDB = null;
     }

      if (mWDB != null && mWDB.isOpen()) {
          mWDB.close();
          mWDB = null;
      }
    }

  // 创建数据库,执行建表语句
  @Override
  public void onCreate(SQLiteDatabase db) {
     String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (" +
            "_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," +
            " phone VARCHAR NOT NULL," +
            " password VARCHAR NOT NULL," +
            " remember INTEGER NOT NULL);";
    db.execSQL(sql);
}

 @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

  }

  public void save(LoginInfo info) {
    // 如果存在则先删除,再添加
    try {
        mWDB.beginTransaction();
        delete(info);
        insert(info);
        mWDB.setTransactionSuccessful();
     } catch (Exception e) {
         e.printStackTrace();
     } finally {
         mWDB.endTransaction();
     }
  }

  public long delete(LoginInfo info) {
     return mWDB.delete(TABLE_NAME, "phone=?", new String[]{info.phone});
  }

  public long insert(LoginInfo info) {
     ContentValues values = new ContentValues();
     values.put("phone", info.phone);
     values.put("password", info.password);
     values.put("remember", info.remember);
     return mWDB.insert(TABLE_NAME, null, values);
  }

  public LoginInfo queryTop() {
    LoginInfo info = null;
    String sql = "select * from " + TABLE_NAME + " where remember = 1 ORDER BY _id DESC limit 1";
    // 执行记录查询动作,该语句返回结果集的游标
    Cursor cursor = mRDB.rawQuery(sql, null);
    if (cursor.moveToNext()) {
        info = new LoginInfo();
        info.id = cursor.getInt(0);
        info.phone = cursor.getString(1);
        info.password = cursor.getString(2);
        info.remember = (cursor.getInt(3) == 0) ? false : true;
    }
     return info;
  }

  public LoginInfo queryByPhone(String phone) {
     LoginInfo info = null;
     String sql = "select * from " + TABLE_NAME;
     // 执行记录查询动作,该语句返回结果集的游标
     Cursor cursor = mRDB.query(TABLE_NAME, null, "phone=? and remember=1", new String[]{phone}, null, null, null);
     if (cursor.moveToNext()) {
        info = new LoginInfo();
        info.id = cursor.getInt(0);
        info.phone = cursor.getString(1);
        info.password = cursor.getString(2);
        info.remember = (cursor.getInt(3) == 0) ? false : true;
     }
     return info;
 }
}

相关文章

网友评论

      本文标题:SQLife实现记住密码功能

      本文链接:https://www.haomeiwen.com/subject/edwpgrtx.html