尝试重新打开已关闭的对象错误Android SQLite
我正在尝试构建一个简单的待办事项列表应用程序,它将用户输入添加到listview,但不断出现此错误尝试重新打开已关闭的对象错误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
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;
}