SQLite を使用しているときに、最も一般的なエラーが発生しました。残念ながら、このエラーが発生したときにカーソルを使用していないため、質問に対する答えが見つかりませんでした。このエラーは、挿入 + 更新後に表示されます。エラーテキストがあります:
09-16 08:03:33.253: E/Cursor(1436): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/*******/databases/settings.db, table = null, query = select * from preferences where pref_name = 'preference'
09-16 08:03:33.253: E/Cursor(1436): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
09-16 08:03:33.253: E/Cursor(1436): at android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:210)
09-16 08:03:33.253: E/Cursor(1436): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
09-16 08:03:33.253: E/Cursor(1436): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
09-16 08:03:33.253: E/Cursor(1436): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1315)
09-16 08:03:33.253: E/Cursor(1436): at ****.db.SettingsSQLiteHelper.updateValue(SettingsSQLiteHelper.java:132)
09-16 08:03:33.253: E/Cursor(1436): at ****.PreferencesActivity$1.onClick(PreferencesActivity.java:67)
09-16 08:03:33.253: E/Cursor(1436): at android.view.View.performClick(View.java:2408)
09-16 08:03:33.253: E/Cursor(1436): at android.view.View$PerformClick.run(View.java:8816)
09-16 08:03:33.253: E/Cursor(1436): at android.os.Handler.handleCallback(Handler.java:587)
09-16 08:03:33.253: E/Cursor(1436): at android.os.Handler.dispatchMessage(Handler.java:92)
09-16 08:03:33.253: E/Cursor(1436): at android.os.Looper.loop(Looper.java:123)
09-16 08:03:33.253: E/Cursor(1436): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-16 08:03:33.253: E/Cursor(1436): at java.lang.reflect.Method.invokeNative(Native Method)
09-16 08:03:33.253: E/Cursor(1436): at java.lang.reflect.Method.invoke(Method.java:521)
09-16 08:03:33.253: E/Cursor(1436): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-16 08:03:33.253: E/Cursor(1436): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-16 08:03:33.253: E/Cursor(1436): at dalvik.system.NativeStart.main(Native Method)
実行後、アプリがSQLを実行しようとすると、上記のエラーが発生するコードがあります。
public boolean updateValue(String property, String value) {
SQLiteDatabase database = getWritableDatabase();
try {
ContentValues cv = new ContentValues();
cv.put(COLUMN_PREFNAME, property);
cv.put(COLUMN_PREFVALUE, value);
if (database.rawQuery(
"select * from " + TABLE_PREFERENCES + " where "
+ COLUMN_PREFNAME + " = '" + property + "'", null)
.getCount() < 1) {
Log.i("MyLog", "There wasn't property " + property
+ " and system inserted new row");
database.insert(TABLE_PREFERENCES, null, cv);
} else {
cv.clear();
cv.put(COLUMN_PREFVALUE, value);
database.update(TABLE_PREFERENCES, cv, COLUMN_PREFNAME
+ "='" + property + "'", null);
}
database.close();
} catch (Exception e) {
Log.e("MyLog", "Error in SettingsDB.updateValue :: " + e);
database.close();
return false;
}
return true;
}
要約すると、アプリの最初の起動は、上記で説明したメソッドを実行して、アプリケーションの設定をセットアップします。このメソッドの後、アプリはエラーのために SQL を実行できません。アプリケーションを再起動すると、アプリがメソッドを再度開始しないため、うまく機能します。私が閉じなかったある種の目に見えないカーソルがあると思います。このエラーを削除するには、何を追加または閉じる必要がありますか? ありがとうございました!