You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用忘记密码Intent崩溃及登录DB查询异常求助

Android登录页崩溃及跳转问题修复

问题现象

  • 登录页包含忘记密码、登录、注册三个按钮,注册功能的显式Intent可正常运行
  • 点击忘记密码按钮时,应用先自动最小化,再次点击直接崩溃
  • 输入正确用户名和密码执行登录操作时,应用崩溃
  • 已知ForgetPasswordPage.java中未对back控件执行findViewById初始化操作,可能是崩溃原因之一

相关代码片段

LoginPage.java - 忘记密码按钮逻辑

forgetpass.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(LoginPage.this,ForgetPasswordPage.class);
        startActivity(intent);
    }
});

LoginPage.java - 登录按钮逻辑

signin.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String uname = username.getEditText().getText().toString();
        String pass = password.getEditText().getText().toString();

        if (dbHelper.checkUsername(uname))
        {
            if (dbHelper.checkusernamePassword(uname,pass))
            {
                Intent intent = new Intent(LoginPage.this, HomePage.class);
                startActivity(intent);
            }else {
                password.setError("Incorrect password");
            }
        }else {
            username.setError("Username not found");
        }
    }
});

DBHelper.java - 数据库查询/更新逻辑

public boolean checkUsername (String username) {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor =  db.rawQuery("SELECT * FROM users WHERE usnername = ?",new  String[] {username});
    if (cursor.getCount() > 0)
        return true;
    else
        return false;
}

public boolean checkusernamePassword (String username, String password) {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor =  db.rawQuery("SELECT * FROM users WHERE usnername = ? and password = ?",new  String[] {username,password});
    if (cursor.getCount() > 0)
        return true;
    else
        return false;
}

public boolean changePassword (String username, String password) {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery("UPDATE users SET passwod = ? WHERE username = ?",new String[] {password,username});
    if  (cursor.getCount() > 0)
        return true;
    else
        return false;
}

修复方案

1. 修复DBHelper中的拼写错误与逻辑错误

DBHelper中存在多处字段名拼写错误,以及错误使用rawQuery执行更新操作,这是登录崩溃的核心原因:

  • 字段名拼写错误:usnername应改为username,passwod应改为password
  • 更新操作错误:rawQuery仅用于查询,执行UPDATE需使用update方法或execSQL,且需正确判断操作结果

修改后的DBHelper代码:

public boolean checkUsername(String username) {
    SQLiteDatabase db = this.getReadableDatabase();
    // 修正字段名拼写错误:usnername -> username
    Cursor cursor = db.rawQuery("SELECT * FROM users WHERE username = ?", new String[]{username});
    boolean exists = cursor.getCount() > 0;
    cursor.close(); // 关闭Cursor释放资源
    db.close(); // 关闭数据库连接
    return exists;
}

public boolean checkusernamePassword(String username, String password) {
    SQLiteDatabase db = this.getReadableDatabase();
    // 修正字段名拼写错误:usnername -> username
    Cursor cursor = db.rawQuery("SELECT * FROM users WHERE username = ? and password = ?", new String[]{username, password});
    boolean match = cursor.getCount() > 0;
    cursor.close();
    db.close();
    return match;
}

public boolean changePassword(String username, String password) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    // 修正字段名拼写错误:passwod -> password
    values.put("password", password);
    // 使用update方法执行更新,返回受影响的行数
    int rowsUpdated = db.update("users", values, "username = ?", new String[]{username});
    db.close();
    // 受影响行数>0说明修改成功
    return rowsUpdated > 0;
}

2. 初始化ForgetPasswordPage中的back控件

在ForgetPasswordPage.java的onCreate方法中添加back控件的初始化代码,避免空指针崩溃:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_forget_password);
    
    // 替换为你的back控件ID
    Button backBtn = findViewById(R.id.back_button);
    backBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish(); // 返回上一页
        }
    });
}

3. 补充Activity注册检查

确保ForgetPasswordPage和HomePage已在AndroidManifest.xml中注册,避免跳转时崩溃:

<activity android:name=".ForgetPasswordPage"/>
<activity android:name=".HomePage"/>

内容的提问来源于stack exchange,提问作者Harsh Kukadiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:17:15