2011-12-29 8 views
1

私の質問はこのoneと非常によく似ていますが、少し異なります。 SQLCiperで暗号化されたテーブル内のすべてのクエリを単純に検索しようとすると、次のエラーが発生します。 SQLCipher - 非アクティブ化されていないカーソルの終了エラー

12-29 11:37:54.329: E/Cursor(10837): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.company.myapp/databases/data, table = data_table, query = SELECT rowid, data FROM data_table 
12-29 11:37:54.329: E/Cursor(10837): info.guardianproject.database.sqlcipher.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here 
12-29 11:37:54.329: E/Cursor(10837): at info.guardianproject.database.sqlcipher.SQLiteCursor.<init>(SQLiteCursor.java:225) 
12-29 11:37:54.329: E/Cursor(10837): at info.guardianproject.database.sqlcipher.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53) 
12-29 11:37:54.329: E/Cursor(10837): at info.guardianproject.database.sqlcipher.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1410) 
12-29 11:37:54.329: E/Cursor(10837): at info.guardianproject.database.sqlcipher.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1289) 
12-29 11:37:54.329: E/Cursor(10837): at info.guardianproject.database.sqlcipher.SQLiteDatabase.query(SQLiteDatabase.java:1243) 
12-29 11:37:54.329: E/Cursor(10837): at info.guardianproject.database.sqlcipher.SQLiteDatabase.query(SQLiteDatabase.java:1325) 
12-29 11:37:54.329: E/Cursor(10837): at com.company.appName.DatabaseManager.queryAllItems(DatabaseManager.java:105) 

は、私はそれを使用して行われていたが、私がそれを使用して起動することができるよ前であっても、私はこのエラーを取得していているようです後 Cursorを閉じるのを忘れた場合、このエラーはのみ起こるだろうと思いました。あなたが問題を解決します startManagingCursor(c);を呼び出す場合、

public Cursor queryAllItems() { 
    return database.query(DATABASE_TABLE, new String[] {KEY_ID, KEY_DATA}, null, null, null, null, null); 
} 
+1

エラーは、「Cursor」がここで開かれたことを示します。私には、 'queryAllItems()'が正常に呼び出されたことを意味しますが、 'Cursor'を閉じたことはありません。最初に' Cursor'を作成した場所を教えてくれます。 – CommonsWare

+0

あなたはまったく正しいです、私はいくつかのデバッグマーカーを入れて、すべてのクエリが完了した後でエラーが発生していることに気付きました。私はそのスタックトレースに惑わされたと思います。 – Brian

答えて

1

私はスタックトレースに惑わされ、クエリのすべての操作が完了した後にCursor.deactivate()Cursor.close()に電話する必要があるようです。

0

カーソルを作成した後:

はここ queryAllItems()方法でのコードです。ここで 'c'はカーソル参照です。

関連する問題