应用程序没有closures在这里打开的游标或数据库对象:

我的代码是:

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(); } 

我已经在这里closures数据库..在我所有的活动,除了这个工作(没有例外显示)..在这里,当我按下这个testing活动的button,下面的exception抛出

 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) 

这个getEvents行引发了exception:

 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; } } 

例外:

 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) 

Solutions Collecting From Web of "应用程序没有closures在这里打开的游标或数据库对象:"

我解决了这个例外。 我在打电话

  db = eventsData.getReadableDatabase(); 

两次这就是为什么抛出exception

你试过了吗:

  Cursor cursor = getEvents(); startManagingCursor(cursor); cursor.close(); 

你有没有尝试通过返回值closures游标像cursor.close

  private Cursor getEvents() { try { db = eventsData.getReadableDatabase(); Cursor cursor = db.query(EventDataSQLHelper.TABLE, null, null, null, null, null, null); startManagingCursor(cursor); cursor.close(); return cursor; } catch (Exception ex) { System.out.println("Exception Occured : " + ex.toString()); return null; }