2013-02-16 3 views
0

안드로이드 2.3.3SQLiteOpenHelper 가까이()를 명시 적으로 호출되지 않았다

나는 데이터베이스에 액세스 내 응용 프로그램에서이 개 활동을해야합니다. 내가 모바일의 방향을 바꿀 때마다, 나는 프로그램이 작동하더라도 logcat에서 다음과 같은 오류를 얻는다. 오류 메시지에서 close()으로 전화하고 데이터베이스와 커서를 닫아야한다는 것을 알고 있습니다. 그러나 나는 그것을 정확하게 어디에 두어야합니까?

해당 활동의 onDestroy()에있는 데이터베이스와 커서를 닫으면 문제가 해결됩니까? 여기

Database pm; 
     Cursor c; 

    @Override 
     public void onDestroy() { 
      pm.close(); 
      c.close(); 
      // Any other cursors that are used... 

      super.onDestroy(); 
    } 

로그 캣 추적을 넣다 필요

...
02-16 22:37:50.419: E/Database(602): close() was never explicitly called on database 'portfolio' 
02-16 22:37:50.419: E/Database(602): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here 
02-16 22:37:50.419: E/Database(602): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1849) 
02-16 22:37:50.419: E/Database(602): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:822) 
02-16 22:37:50.419: E/Database(602): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:856) 
02-16 22:37:50.419: E/Database(602): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:849) 
02-16 22:37:50.419: E/Database(602): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:553) 
02-16 22:37:50.419: E/Database(602): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) 
02-16 22:37:50.419: E/Database(602): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118) 
02-16 22:37:50.419: E/Database(602): at com.xx.xxx.Database.<init>(Database.java:21) 
02-16 22:37:50.419: E/Database(602): at com.xx.xxx.Brokerage_Settings.onCreate(Brokerage_Settings.java:118) 
02-16 22:37:50.419: E/Database(602): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
02-16 22:37:50.419: E/Database(602): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
02-16 22:37:50.419: E/Database(602): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
02-16 22:37:50.419: E/Database(602): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
02-16 22:37:50.419: E/Database(602): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
02-16 22:37:50.419: E/Database(602): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-16 22:37:50.419: E/Database(602): at android.os.Looper.loop(Looper.java:130) 
02-16 22:37:50.419: E/Database(602): at android.app.ActivityThread.main(ActivityThread.java:3687) 
02-16 22:37:50.419: E/Database(602): at java.lang.reflect.Method.invokeNative(Native Method) 
02-16 22:37:50.419: E/Database(602): at java.lang.reflect.Method.invoke(Method.java:507) 
02-16 22:37:50.419: E/Database(602): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) 
02-16 22:37:50.419: E/Database(602): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636) 
02-16 22:37:50.419: E/Database(602): at dalvik.system.NativeStart.main(Native Method) 

데이터베이스와 커서 오브젝트를 종료 할 수있는 가장 좋은 방법은 무엇입니까

?

+0

어떤 오류가 발생합니까? –

+0

logcat trace를 사용하여 질문을 업데이트했습니다. –

+1

@VamsiChalla onPause()가 더 좋습니다. –

답변

0

onPause()에서 전화하십시오. 모바일의 방향을 변경하면 앱이 상태를 변경하고 android system에 의해 super.onPause()가 호출되기 전에 데이터베이스/커서 객체를 닫아야합니다. super.onPause() 명령 전에 onPause 메서드를 닫습니다.

+0

그것은 일했다 !!! 감사.. –

관련 문제