应用程序没有关闭在这里打开的游标或数据库对象: [英] Application did not close the cursor or database object that was opened here :
本文介绍了应用程序没有关闭在这里打开的游标或数据库对象:的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的code是:
公共类EventDataSQLHelper扩展SQLiteOpenHelper {
私有静态最后弦乐DATABASE_NAME =my.db;
}
公共类测试延伸活动{
EventDataSQLHelper eventsData;
@覆盖
保护无效的onDestroy(){
的System.out.println(的onDestroy);
关闭();
如果(DB!= NULL){
db.close();
}
super.onDestroy();
}
公共无效的close(){
eventsData.close();
}
我已经关闭了数据库在这里。在我所有的活动,除了这个它的工作(不例外所示)。这里,当我preSS后退按钮从本次测试活动的下方抛出异常
02-14 15:59:34.642:ERROR /数据库(535):关闭()从来没有明确要求数据库/data/data/com.tesy.connect/databases /test.db
02-14 15:59:34.642:ERROR /数据库(535):android.database.sqlite.DatabaseObjectNotClosedException:应用程序没有关闭在这里打开的游标或数据库对象
02-14 15:59:34.642:ERROR /数据库(535):在android.database.sqlite.SQLiteDatabase< INIT>(SQLiteDatabase.java:1810)。
02-14 15:59:34.642:ERROR /数据库(535):在android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
02-14 15:59:34.642:ERROR /数据库(535):在android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
02-14 15:59:34.642:ERROR /数据库(535):在android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
02-14 15:59:34.642:ERROR /数据库(535):在android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540)
02-14 15:59:34.642:ERROR /数据库(535):在android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
02-14 15:59:34.642:ERROR /数据库(535):在android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
02-14 15:59:34.642:ERROR /数据库(535):在android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:158)
02-14 15:59:34.642:ERROR /数据库(535):在com.connect.Test.getEvents(Connect_EY.java:755)
02-14 15:59:34.642:ERROR /数据库(535):在com.connect.Test.onCreate(Connect_EY.java:662)
02-14 15:59:34.642:ERROR /数据库(535):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-14 15:59:34.642:ERROR /数据库(535):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-14 15:59:34.642:ERROR /数据库(535):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-14 15:59:34.642:ERROR /数据库(535):在android.app.ActivityThread.access $ 2300(ActivityThread.java:125)
02-14 15:59:34.642:ERROR /数据库(535):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033)
02-14 15:59:34.642:ERROR /数据库(535):在android.os.Handler.dispatchMessage(Handler.java:99)
02-14 15:59:34.642:ERROR /数据库(535):在android.os.Looper.loop(Looper.java:123)
该异常被抛出这一getEvents行:
公共类测试延伸活动{
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.pageview);
startRefreshActivity();
尝试{/ *如果没有记录存在创建一个新的* /
eventsData =新EventDataSQLHelper(本);
光标光标= getEvents();
startManagingCursor(光标);
}
}
私人光标getEvents(){
尝试 {
DB = eventsData.getReadableDatabase();
光标光标= db.query(EventDataSQLHelper.TABLE,NULL,NULL,
NULL,NULL,NULL,NULL);
startManagingCursor(光标);
返回游标;
}赶上(例外前){
的System.out.println(异常出现:+ ex.toString());
返回null;
}
}
例外:
02-14 15:59:34.642:ERROR /数据库(535):在com.testconnect.Test.getEvents(Test.java:755)
02-14 15:59:34.642:ERROR /数据库(535):在com.testconnect.Test.onCreate(Test.java:662)
解决方案
我解决了异常。我打电话
DB = eventsData.getReadableDatabase();
两次,这就是为什么抛出异常
My code is :
public class EventDataSQLHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "my.db";
}
public class Test extends Activity {
EventDataSQLHelper eventsData;
@Override
protected void onDestroy() {
System.out.println("onDestroy");
close();
if (db!=null){
db.close();
}
super.onDestroy();
}
public void close() {
eventsData.close();
}
I have closed the db here.. In all my activities except this its working(no exception is shown).. Here when i press back button from this Test activity the below exception is thrown
02-14 15:59:34.642: ERROR/Database(535): close() was never explicitly called on database '/data/data/com.tesy.connect/databases/test.db'
02-14 15:59:34.642: ERROR/Database(535): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
02-14 15:59:34.642: ERROR/Database(535): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1810)
02-14 15:59:34.642: ERROR/Database(535): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
02-14 15:59:34.642: ERROR/Database(535): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
02-14 15:59:34.642: ERROR/Database(535): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
02-14 15:59:34.642: ERROR/Database(535): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540)
02-14 15:59:34.642: ERROR/Database(535): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
02-14 15:59:34.642: ERROR/Database(535): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
02-14 15:59:34.642: ERROR/Database(535): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:158)
02-14 15:59:34.642: ERROR/Database(535): at com.connect.Test.getEvents(Connect_EY.java:755)
02-14 15:59:34.642: ERROR/Database(535): at com.connect.Test.onCreate(Connect_EY.java:662)
02-14 15:59:34.642: ERROR/Database(535): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-14 15:59:34.642: ERROR/Database(535): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-14 15:59:34.642: ERROR/Database(535): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-14 15:59:34.642: ERROR/Database(535): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
02-14 15:59:34.642: ERROR/Database(535): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
02-14 15:59:34.642: ERROR/Database(535): at android.os.Handler.dispatchMessage(Handler.java:99)
02-14 15:59:34.642: ERROR/Database(535): at android.os.Looper.loop(Looper.java:123)
The exception is thrown on this getEvents line :
public class Test extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pageview);
startRefreshActivity();
try { /* If No Record Exists Create a New One */
eventsData = new EventDataSQLHelper(this);
Cursor cursor = getEvents();
startManagingCursor(cursor);
}
}
private Cursor getEvents() {
try {
db = eventsData.getReadableDatabase();
Cursor cursor = db.query(EventDataSQLHelper.TABLE, null, null,
null, null, null, null);
startManagingCursor(cursor);
return cursor;
} catch (Exception ex) {
System.out.println("Exception Occured : " + ex.toString());
return null;
}
}
Exception :
02-14 15:59:34.642: ERROR/Database(535): at com.testconnect.Test.getEvents(Test.java:755)
02-14 15:59:34.642: ERROR/Database(535): at com.testconnect.Test.onCreate(Test.java:662)
解决方案
I resolved the exception. I was calling
db = eventsData.getReadableDatabase();
twice thats why the exception is thrown
这篇关于应用程序没有关闭在这里打开的游标或数据库对象:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文