2012-06-15 22 views
5

Veritabanı yardımcı nesnesine sahibim. Aktiviteden ayrılırken kapanmam çok önemli, bu yüzden yapıyorum. Ancak, etkinliğe geri döndüğümde, zaten kapatılmış bir veritabanını sorgulamakla ilgili bir uyarı alıyorum. Sorgu aslında işe yarıyor, ama hala yanlış bir şey var.Android: SqLite veritabanı yasadışı durum istisnası (veritabanı zaten kapalı)

Android etkinlik yaşam döngüsünü anlamam güçlü değil, ancak veritabanını onResume() içinde yeniden açmam gerektiğini varsayardım. Bu doğru değil mi? Burada

onResume() 'dir:

Burada
@Override 
protected void onResume() { 

super.onResume(); 

    dbHelper.setInteger(playerID);   
    dbHelper.openDataBase(); 
    ourCursor = dbHelper.getPlayerSavedQuestions();   
    startManagingCursor(ourCursor); 
    adapter = new MyCustomAdapter(ourCursor); 
    myListView.setAdapter(adapter); 
} 

dbHelper.openDataBase()' i;

public void openDataBase() throws SQLException { 
    String myPath = DATABASE_PATH + DATABASE_NAME; 
    dbSqlite = SQLiteDatabase.openDatabase(myPath, null, 
      SQLiteDatabase.OPEN_READWRITE);  
} 

İşte benim logcat geçerli:

Sen uzakta etkinliğinden giderken çok (muhtemelen olabilir) yok olsun o ... onResume daki dbhelper sınıf örneğini gerekir
06-15 13:51:32.388: W/SQLiteCursor(26750): requery() failed database /data/data/com.boboshi.exquizit.eng/databases/exquizit_custom.mp3 (conn# 0) already closed 
06-15 13:51:32.388: W/SQLiteCursor(26750): java.lang.IllegalStateException: database /data/data/com.boboshi.exquizit.eng/databases/exquizit_custom.mp3 (conn# 0) already closed 
06-15 13:51:32.388: W/SQLiteCursor(26750): at android.database.sqlite.SQLiteDatabase.verifyDbIsOpen(SQLiteDatabase.java:2082) 
06-15 13:51:32.388: W/SQLiteCursor(26750): at android.database.sqlite.SQLiteDatabase.getDbConnection(SQLiteDatabase.java:2407) 
06-15 13:51:32.388: W/SQLiteCursor(26750): at android.database.sqlite.SQLiteDatabase.getDatabaseHandle(SQLiteDatabase.java:2388) 
06-15 13:51:32.388: W/SQLiteCursor(26750): at android.database.sqlite.SQLiteCursor.requery(SQLiteCursor.java:246) 
06-15 13:51:32.388: W/SQLiteCursor(26750): at android.app.Activity.performRestart(Activity.java:4505) 
06-15 13:51:32.388: W/SQLiteCursor(26750): at android.app.Activity.performResume(Activity.java:4531) 
06-15 13:51:32.388: W/SQLiteCursor(26750): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2434) 
06-15 13:51:32.388: W/SQLiteCursor(26750): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2472) 
06-15 13:51:32.388: W/SQLiteCursor(26750): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1173) 
06-15 13:51:32.388: W/SQLiteCursor(26750): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-15 13:51:32.388: W/SQLiteCursor(26750): at android.os.Looper.loop(Looper.java:137) 
06-15 13:51:32.388: W/SQLiteCursor(26750): at android.app.ActivityThread.main(ActivityThread.java:4424) 
06-15 13:51:32.388: W/SQLiteCursor(26750): at java.lang.reflect.Method.invokeNative(Native Method) 
06-15 13:51:32.388: W/SQLiteCursor(26750): at java.lang.reflect.Method.invoke(Method.java:511) 
06-15 13:51:32.388: W/SQLiteCursor(26750): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
06-15 13:51:32.388: W/SQLiteCursor(26750): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
06-15 13:51:32.388: W/SQLiteCursor(26750): at dalvik.system.NativeStart.main(Native Method)  
+1

ihtiyaç olabilir .. ..... –

+0

'dbHelper.openDataBase()' '??? – GAMA

+0

deneyin db = dbHelper.getWritableDatabase();' ... Burada db' SQLiteDatabase nesnesidir. – GAMA

cevap

2

. Hatta yeni bir başlangıç ​​çağrıldığında onResume beri Aslında

dbHelper = new YourDatabaseHelper(); 

, orada tüm kodunuzu taşımak (ve dolayısıyla iki kez) Eğer Yardımcısı başlatmasını (ve başka şeyler yaparken kaçının. Dosya kod dbHelper

+0

Barak, tamamen haklısınız. Tam olarak benim sorunum: OnCreate() ve onResume(). – rustyWhitefeather

İlgili konular