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

Android应用设备运行时闪退,调用db.getAllTasks()报错求排查

问题定位与修复方案

以下是导致崩溃的核心错误及修复方案,按优先级排序:

1. getAllTasks方法查询表名参数完全错误

你在query方法第一个参数写了String.valueOf(Boolean.parseBoolean(TODO_TABLE)),TODO_TABLE是字符串常量"todoTable",无法被解析为布尔值,运行时会直接抛出IllegalArgumentException导致崩溃。
修复:直接传入表名常量即可,修改为:

Cursor sqlcursor = db.query(TODO_TABLE, null, null, null, null, null, null, null)

2. 数据库建表语句语法错误

建表语句拼接时TASK字段后面缺少空格,你写的是+ TASK +"TEXT, ",拼接后生成的语句会出现taskDescTEXT的错误字段名,导致taskDesc字段创建失败,后续读写该字段时抛出字段不存在的异常。
修复:在TEXT前加空格,修改为:

private static final String CREATE_TODO_TABLE="CREATE TABLE "+ TODO_TABLE+" ( "+ID+
    " INTEGER PRIMARY KEY AUTOINCREMENT, "
    + TASK +" TEXT, "+STATUS+
    " INTEGER)";

注意:修改建表语句后需要卸载重装APP,或者升级数据库版本号触发onUpgrade重建表,否则旧表结构不会更新

3. MainActivity中Adapter初始化顺序错误

你初始化ToDoAdapter的时候,db实例还没有创建,此时传入Adapter的是null,如果Adapter内部有调用db的逻辑会直接触发空指针崩溃。
修复:调整初始化顺序,先初始化db,再创建Adapter:

db=new Databases(this);
db.openDatabse();
taskAdapter=new ToDoAdapter(db,this);
taskRecyclerView.setAdapter(taskAdapter);

4. 不必要的事务使用问题

getAllTasks是只读操作,不需要开启事务,你当前开启事务后也没有调用db.setTransactionSuccessful(),虽然读操作不会有回滚问题,但冗余的事务逻辑会增加异常概率,建议直接删除事务相关代码,优化后的getAllTasks参考:

public List<ToDoModel> getAllTasks(){
    List<ToDoModel> taskList =new ArrayList<>();
    try (Cursor sqlcursor = db.query(TODO_TABLE, null, null, null, null, null, null, null)) {
        if (sqlcursor != null && sqlcursor.moveToFirst()) {
            do {
                ToDoModel thisTask = new ToDoModel();
                int idIndex = sqlcursor.getColumnIndex(ID);
                int taskIndex = sqlcursor.getColumnIndex(TASK);
                int statusIndex = sqlcursor.getColumnIndex(STATUS);
                // 提前判断字段索引是否合法,避免异常
                if(idIndex != -1) thisTask.setId(sqlcursor.getInt(idIndex));
                if(taskIndex != -1) thisTask.setEachtask(sqlcursor.getString(taskIndex));
                if(statusIndex != -1) thisTask.setStatus(sqlcursor.getInt(statusIndex));
                taskList.add(thisTask);
            } while (sqlcursor.moveToNext());
        }
    }
    return taskList;
}

内容的提问来源于stack exchange,提问作者Siddhi Bhardwaj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:15:01