2012-06-15 44 views
5

Tôi có đối tượng trợ giúp cơ sở dữ liệu. Điều quan trọng là tôi đóng nó khi rời khỏi hoạt động, vì vậy tôi làm. Tuy nhiên, khi trở lại hoạt động, tôi nhận được cảnh báo về truy vấn cơ sở dữ liệu đã bị đóng. Truy vấn thực sự hoạt động, nhưng vẫn có điều gì đó rõ ràng là sai.Android: Cơ sở dữ liệu ngoại lệ bất hợp pháp SqLite (cơ sở dữ liệu đã đóng)

Sự hiểu biết của tôi về vòng đời hoạt động Android không mạnh, nhưng tôi cho rằng tôi cần phải mở lại cơ sở dữ liệu trong onResume(). Điều này có đúng không?

Đây là onResume():

@Override 
protected void onResume() { 

super.onResume(); 

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

Đây là dbHelper.openDataBase();

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

Đây là logcat của tôi:

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

cần dbHelper mã tập tin .. ..... –

+0

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

+0

thử 'db = dbHelper.getWritableDatabase();' ... trong đó 'db' là đối tượng SQLiteDatabase – GAMA

Trả lời

2

Bạn cần phải nhanh chóng lớp dbhelper của bạn trong onResume ... điều đó quá (có thể) được tiêu huỷ khi bạn đi xa từ hoạt động này.

dbHelper = new YourDatabaseHelper(); 

Trên thực tế, kể từ khi onResume được gọi là ngay cả trên một sự khởi đầu mới, bạn có thể di chuyển tất cả các mã của bạn có (và do đó tránh instantiating bạn helper (và làm những việc khác) hai lần.

+0

Barak, bạn hoàn toàn đúng. chính xác vấn đề của tôi: Tôi đã làm tất cả mọi thứ hai lần, trong onCreate() và onResume(). – rustyWhitefeather

Các vấn đề liên quan