如何将SQLite查询获取的邮箱与密码值存入Login.java变量
在Login.java中存储SQLite查询的邮箱和密码变量
嘿,我来帮你搞定这个问题!你的MYSQLiteHelper里的getemail方法已经帮你把查询到的用户邮箱和密码封装成user_reg对象返回了,只需要在Login.java里正确接收这个对象,就能把值存到变量里用于比对。下面是具体的实现步骤和优化建议:
第一步:接收查询返回的user_reg对象
你原来的调用代码只是执行了查询,但没有接收返回的用户对象,需要修改成这样:
MySQLiteHelper db = new MySQLiteHelper(getApplicationContext()); String emailval = email.getText().toString(); // 接收查询到的用户对象 user_reg retrievedUser = db.getemail(emailval);
第二步:从对象中提取值到变量
接下来定义变量存储邮箱和密码,同时要处理没有查询到对应用户的情况,避免空指针异常:
// 初始化变量,默认值为null String storedEmail = null; String storedPassword = null; // 只有查询到有效用户时才赋值 if (retrievedUser != null) { storedEmail = retrievedUser.getEmail(); storedPassword = retrievedUser.getPassword(); }
重要优化:修复getemail方法的潜在问题
看你提供的getemail方法,有两个需要优化的点,能避免后续出现bug:
- 如果没有查询到数据,
cursor.moveToFirst()会失败,直接调用cursor.getString()会抛出异常 - 没有关闭
Cursor和SQLiteDatabase,容易造成内存泄漏
修改后的getemail方法如下:
public user_reg getemail(String ema) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(TABLE_USERREGISTRATION, // 表名 COLUMNS, // 要查询的列 " email = ?", // 查询条件 new String[] { String.valueOf(ema) }, // 条件参数 null, null, null, null); user_reg user = null; // 先判断是否有查询结果 if (cursor != null && cursor.getCount() > 0) { cursor.moveToFirst(); user = new user_reg(); user.setEmail(cursor.getString(3)); user.setPassword(cursor.getString(4)); Log.d("getUser(" + ema + ")", user.toString()); } // 关闭Cursor,释放资源 if (cursor != null) { cursor.close(); } // 关闭数据库连接 db.close(); return user; }
完整的Login.java比对示例
现在你可以用存储的变量和用户输入的密码进行比对了:
// 获取用户输入的密码 String inputPassword = password.getText().toString(); // 进行登录校验 if (storedPassword != null && storedPassword.equals(inputPassword)) { // 密码匹配,登录逻辑执行 Toast.makeText(this, "登录成功!", Toast.LENGTH_SHORT).show(); } else { // 无此用户或密码错误 Toast.makeText(this, "邮箱或密码错误", Toast.LENGTH_SHORT).show(); }
内容的提问来源于stack exchange,提问作者asifa mahmood
相关产品推荐
相关产品推荐

