2013-01-16 68 views
0

我試圖關閉數據庫光標但後來它說,因爲我得到的回報光標已關閉遊標對象非法呼叫的...定稿光標錯誤

Cursor getDB(String date) { 
    int idate = Integer.parseInt(date.substring(0, 2)) * 1000000 
      + Integer.parseInt(date.substring(3, 5)) * 10000 
      + Integer.parseInt(date.substring(6)); 

    ourHelper = new DbHelper(ourContext); 
    ourDatabase = ourHelper.getReadableDatabase(); 

    Cursor cursor = ourDatabase.rawQuery("SELECT * FROM " + DATABASE_TABLE 
      + " WHERE " + KEY_DATE + " = " + idate,// + 
                // " ORDER BY " 
                // + 
                // KEY_NAME 
                // + 
                // " ASC", 
      null); 
    if (cursor != null && cursor.getCount() > 0) 
     return cursor; 

    return null; 
} 

&這是我如何使用我的回報我得到

我初始化它們作爲

adapter = new MyAdapter1(Day_Book.this, ourCursor, false); 
adapter2 = new MyAdapter2(Day_Book.this, ourCursor2, false); 
case R.id.bShowDB: 
     db = new DB(Day_Book.this); 
     ourCursor = db.getDB(et1.getText().toString()); 
     adapter.changeCursor(ourCursor); 
     adapter2.changeCursor(ourCursor); 
     //ourCursor.close(); 
     db.close(); 
     lv1.setAdapter(adapter); 
     lv2.setAdapter(adapter2); 
     //ourCursor.close(); 
     break; 

這是我得到的錯誤光標..

01-17 00:12:41.134: E/Cursor(8724): Finalizing a Cursor that has not been deactivated or closed. database = /mnt/sdcard/JournalDB.db, table = null, query = SELECT * FROM Contains_all_the_entries_of_an_year_of_a_particular_company WHERE date = 17012013 
01-17 00:12:41.134: E/Cursor(8724): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here 
01-17 00:12:41.134: E/Cursor(8724):  at android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:212) 
01-17 00:12:41.134: E/Cursor(8724):  at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53) 
01-17 00:12:41.134: E/Cursor(8724):  at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1454) 
01-17 00:12:41.134: E/Cursor(8724):  at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1424) 
01-17 00:12:41.134: E/Cursor(8724):  at com.balance.start.JournalDB.getDayBook(DB.java:232) 
01-17 00:12:41.134: E/Cursor(8724):  at com.balance.start.Day_Book.onClick(Book.java:93) 
01-17 00:12:41.134: E/Cursor(8724):  at android.view.View.performClick(View.java:2408) 
01-17 00:12:41.134: E/Cursor(8724):  at android.view.View$PerformClick.run(View.java:8816) 
01-17 00:12:41.134: E/Cursor(8724):  at android.os.Handler.handleCallback(Handler.java:587) 
01-17 00:12:41.134: E/Cursor(8724):  at android.os.Handler.dispatchMessage(Handler.java:92) 
01-17 00:12:41.134: E/Cursor(8724):  at android.os.Looper.loop(Looper.java:123) 
01-17 00:12:41.134: E/Cursor(8724):  at  android.app.ActivityThread.main(ActivityThread.java:4633) 
01-17 00:12:41.134: E/Cursor(8724):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-17 00:12:41.134: E/Cursor(8724):  at java.lang.reflect.Method.invoke(Method.java:521) 
01-17 00:12:41.134: E/Cursor(8724):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
01-17 00:12:41.134: E/Cursor(8724):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
01-17 00:12:41.134: E/Cursor(8724):  at dalvik.system.NativeStart.main(Native Method) 

回答

0

刪除db.close();從您的交換機案件。

在onDestroy()中執行此操作。

0

哼,你是兩個不同的適配器設置相同的遊標兩次:

adapter.changeCursor(ourCursor); 
adapter2.changeCursor(ourCursor); 

也許這就是問題的根源。

+0

不..這不是一個原因,因爲我在另一個文件中使用了兩個遊標..這也顯示了同樣的錯誤。 – user1984849

+0

第二點:你有一個db.close。如果關閉數據庫也關閉任何打開的光標,我不會感到驚訝。 – SylvainL