我有一个应用程序从Database表中读取值(Database名为SoftCopyDatabase),并使用从Database中读取的值填充List。单击列表中的项目时,“新建活动开始”。
问题是当我按后退键时出现错误
IllegalStateException: database already closed
我的代码如下:
公共类OpenClick扩展了ListActivity {
public static String subjectName;
private SoftCopyDatabase lectures;
private static int[] subTO = { R.id.subject };
private static String[] subFROM = { SUBJECT };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lectures = new SoftCopyDatabase(this);
}
public void onStart() {
super.onStart();
try {
Cursor cursor = getSubjects();
showSubjects(cursor);
} catch (Exception e) {
e.printStackTrace();
}
}
public void onRestart() {
super.onRestart();
lectures = new SoftCopyDatabase(this);
}
public void onStop() {
super.onStop();
lectures.close();
}
public void onDestroy() {
super.onDestroy();
lectures.close();
}
//remaining code....
}
我想提一点的是,如果我删除onStop()方法,应用程序正常工作。但我必须包含onstop(),因为我想控制数据库的打开和关闭。
答案 0 :(得分:3)
这是一篇很好的文章,涵盖了这个主题:
http://awiden.wordpress.com/2010/03/26/database-mangement-and-the-activity-lifecycle/
答案 1 :(得分:1)
这是正常的,因为两种方法都已执行...只需在两种方法(onDestroy
和onStop
)上执行此操作:
if(lectures.isOpen()){
lectures.close();
}
虽然我认为你可以在其中一个中加入.close
调用。请务必在isOpen
课程中创建SoftCopyDatabase
方法,该方法必须调用SqliteDatabase
对象的isOpen
方法。