尝试重新打开已关闭的对象错误Android SQLite

尝试重新打开已关闭的对象错误Android SQLite,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,我正在尝试构建一个简单的待办事项列表应用程序,它将用户输入添加到listview,但不断出现此错误 public List<Task> getAllTasks() { List<Task> taskList = new ArrayList<Task>(); String selectQuery = "SELECT * FROM " + TABLE_TASKS; SQLiteDatabase db = this.getWritabl

我正在尝试构建一个简单的待办事项列表应用程序,它将用户输入添加到listview,但不断出现此错误

public List<Task> getAllTasks() {
    List<Task> taskList = new ArrayList<Task>();

    String selectQuery = "SELECT  * FROM " + TABLE_TASKS;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);


    if (cursor.moveToFirst()) {
        do {
            Task task = new Task();
            task.setId(cursor.getInt(0));
            task.setTaskName(cursor.getString(1));
            task.setStatus(cursor.getInt(2));
            // Adding contact to list
            taskList.add(task);
        } while (cursor.moveToNext());
    }

    // return task list
    return taskList;
}
这里:list=db.getAllTasks

Caused by: java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/data/activfy.activfy/databases/taskerManager
                                                                 at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
                                                                 at android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:520)
                                                                 at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:263)
                                                                 at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
                                                                 at activfy.activfy.TaskerDbHelper.getAllTasks(TaskerDbHelper.java:73)
                                                                 at activfy.activfy.GoalActivity.onCreate(GoalActivity.java:32)
编辑:

您不应在onCreate中传递给您的SQLiteDatabase上调用close,因为您不拥有该数据库。

请尝试以下操作:

public List<Task> getAllTasks() {
List<Task> taskList = new ArrayList<Task>();

String selectQuery = "SELECT  * FROM " + TABLE_TASKS;

SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
  try {

if (cursor.moveToFirst()) {
    do {
        Task task = new Task();
        task.setId(cursor.getInt(0));
        task.setTaskName(cursor.getString(1));
        task.setStatus(cursor.getInt(2));
        // Adding contact to list
        taskList.add(task);
    } while (cursor.moveToNext());
}
 finally
    {
        if (cursor != null)
        {
            cursor.close();
            db.close();
        }

// return task list
return taskList;
 }

在onCreate中,不应关闭数据库。

发布sqlite助手onCreate和onUpgrade。我猜您正在关闭那里的db。您需要在离开方法之前关闭游标:cursor.close;添加了onCreate和onUpgrade代码。光标。关闭;没有帮助,仍然得到相同的错误。游标永远不会为空
@Override
public void onCreate(SQLiteDatabase db) {

    String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_TASKS + " ( "
            + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_TASKNAME
            + " TEXT, " + KEY_STATUS + " INTEGER)";
    db.execSQL(sql);

    db.close();
}




 @Override
public void onUpgrade(SQLiteDatabase db, int oldV, int newV) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_TASKS);
    // Create tables again
    onCreate(db);
}
public List<Task> getAllTasks() {
List<Task> taskList = new ArrayList<Task>();

String selectQuery = "SELECT  * FROM " + TABLE_TASKS;

SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
  try {

if (cursor.moveToFirst()) {
    do {
        Task task = new Task();
        task.setId(cursor.getInt(0));
        task.setTaskName(cursor.getString(1));
        task.setStatus(cursor.getInt(2));
        // Adding contact to list
        taskList.add(task);
    } while (cursor.moveToNext());
}
 finally
    {
        if (cursor != null)
        {
            cursor.close();
            db.close();
        }

// return task list
return taskList;
 }