SQLite DB를 올바르게 닫을 수있는 방법에 문제가 있습니다.
응용 프로그램을 실행할 때 활동 중 하나가 내 DBAdapter
클래스를 사용하여 내 DB에서 정보 행을 검색 한 다음 사용자가 뒤로 버튼을 누르거나 응용 프로그램을 닫으면 문제를 피하기 위해 즉시 닫고 싶습니다.sqite 데이터베이스를 닫을 때 문제가 발생했습니다.
하지만 동일한 DB 및 어댑터를 사용하는 다른 활동으로 전환하면 오류가 발생합니다. 여기
는 활동 수준 코드 :PlayerSummonDbAdapter PlayerDbAdapter;
PlayerDbAdapter = new PlayerSummonDbAdapter(this);
PlayerDbAdapter.open();
mySummon = new Summon();
mySummon = PlayerDbAdapter.retrieveSummon(1, summonName);
PlayerDbAdapter.close();
그리고 여기 내 어댑터 open()
및 lose()
방법입니다 :의 샘플 여기
public PlayerSummonDbAdapter open() throws SQLException {
dbHelper = new PlayerSummonSQLiteHelper(context);
database = dbHelper.getWritableDatabase();
return this;
}
public void close() {
database.close();
dbHelper.close();
}
된다 오류 로그 : 데이터베이스에 close()가 호출되지 않았 음을 나타냅니다.하지만 그걸 닫습니다. 적어도 내가 한 것 같아.
06-21 00:10:35.928: I/dalvikvm(23203): Uncaught exception thrown by finalizer (will be discarded):
06-21 00:10:35.928: I/dalvikvm(23203): Ljava/lang/IllegalStateException;: Finalizing cursor [email protected] on Moves that has not been deactivated or closed
06-21 00:10:35.928: I/dalvikvm(23203): at android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:620)
06-21 00:10:35.928: I/dalvikvm(23203): at dalvik.system.NativeStart.run(Native Method)
06-21 00:10:35.932: E/Database(23203): close() was never explicitly called on database '/mnt/sdcard/Summon.sqlite'
06-21 00:10:35.932: E/Database(23203): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
06-21 00:10:35.932: E/Database(23203): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1847)
06-21 00:10:35.932: E/Database(23203): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
06-21 00:10:35.932: E/Database(23203): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854)
06-21 00:10:35.932: E/Database(23203): at com.willmer.SummonListAdapter.open(SummonListAdapter.java:55)
06-21 00:10:35.932: E/Database(23203): at com.willmer.BattleActivity.onCreate(BattleActivity.java:78)
06-21 00:10:35.932: E/Database(23203): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-21 00:10:35.932: E/Database(23203): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
06-21 00:10:35.932: E/Database(23203): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
06-21 00:10:35.932: E/Database(23203): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
06-21 00:10:35.932: E/Database(23203): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
06-21 00:10:35.932: E/Database(23203): at android.os.Handler.dispatchMessage(Handler.java:99)
06-21 00:10:35.932: E/Database(23203): at android.os.Looper.loop(Looper.java:130)
06-21 00:10:35.932: E/Database(23203): at android.app.ActivityThread.main(ActivityThread.java:3688)
06-21 00:10:35.932: E/Database(23203): at java.lang.reflect.Method.invokeNative(Native Method)
06-21 00:10:35.932: E/Database(23203): at java.lang.reflect.Method.invoke(Method.java:507)
06-21 00:10:35.932: E/Database(23203): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
06-21 00:10:35.932: E/Database(23203): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
06-21 00:10:35.932: E/Database(23203): at dalvik.system.NativeStart.main(Native Method)
06-21 00:10:35.944: E/Database(23203): close() was never explicitly called on database '/data/data/com.willmer/databases/PlayerSummons.db'
06-21 00:10:35.944: E/Database(23203): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
06-21 00:10:35.944: E/Database(23203): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1847)
06-21 00:10:35.944: E/Database(23203): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
06-21 00:10:35.944: E/Database(23203): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854)
06-21 00:10:35.944: E/Database(23203): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:847)
06-21 00:10:35.944: E/Database(23203): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:635)
06-21 00:10:35.944: E/Database(23203): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
06-21 00:10:35.944: E/Database(23203): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
06-21 00:10:35.944: E/Database(23203): at com.willmer.PlayerSummonDbAdapter.open(PlayerSummonDbAdapter.java:67)
06-21 00:10:35.944: E/Database(23203): at com.willmer.BattleActivity.CaptureSummon(BattleActivity.java:563)
06-21 00:10:35.944: E/Database(23203): at com.willmer.BattleActivity.onClick(BattleActivity.java:146)
06-21 00:10:35.944: E/Database(23203): at android.view.View.performClick(View.java:2538)
06-21 00:10:35.944: E/Database(23203): at android.view.View$PerformClick.run(View.java:9152)
06-21 00:10:35.944: E/Database(23203): at android.os.Handler.handleCallback(Handler.java:587)
06-21 00:10:35.944: E/Database(23203): at android.os.Handler.dispatchMessage(Handler.java:92)
06-21 00:10:35.944: E/Database(23203): at android.os.Looper.loop(Looper.java:130)
06-21 00:10:35.944: E/Database(23203): at android.app.ActivityThread.main(ActivityThread.java:3688)
06-21 00:10:35.944: E/Database(23203): at java.lang.reflect.Method.invokeNative(Native Method)
06-21 00:10:35.944: E/Database(23203): at java.lang.reflect.Method.invoke(Method.java:507)
06-21 00:10:35.944: E/Database(23203): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
06-21 00:10:35.944: E/Database(23203): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
06-21 00:10:35.944: E/Database(23203): at dalvik.system.NativeStart.main(Native Method)
먼저 시도 ** mySummon ** –