2012-01-29 71 views
1

我的應用程序解析三個不同的XML並將它們保存到數據庫。只要我使用AsyncTask和進度對話框,它就可以正常工作,因爲它們都是一個接一個地執行的。我現在開始在三個不同的線程(+ UI線程)中同時解析數據。現在這四個線程爭奪數據庫,並且有時會崩潰,如果正在使用UI線程。我收到以下錯誤:線程之間的數據庫衝突

ERROR/AndroidRuntime(651): Caused by: java.lang.IllegalStateException: database /data/data/edu.activity/databases/vreme already closed 

然後其他時間我得到

INFO/System.out(667): XML Pasing5 Excpetion = java.lang.IllegalStateException: database not open 

或這一個

01-30 00:56:05.232: ERROR/AndroidRuntime(731): FATAL EXCEPTION: Thread-11 
01-30 00:56:05.232: ERROR/AndroidRuntime(731): java.lang.IllegalStateException: database not open 
01-30 00:56:05.232: ERROR/AndroidRuntime(731):  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1493) 
01-30 00:56:05.232: ERROR/AndroidRuntime(731):  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410) 
01-30 00:56:05.232: ERROR/AndroidRuntime(731):  at edu.database.DBAdapter.insertSamodejne(DBAdapter.java:229) 
01-30 00:56:05.232: ERROR/AndroidRuntime(731):  at edu.util.ApplicationInt.addDBSamodejne(ApplicationInt.java:49) 
01-30 00:56:05.232: ERROR/AndroidRuntime(731):  at edu.xml.XMLtoDB.insertSamodejne(XMLtoDB.java:58) 
01-30 00:56:05.232: ERROR/AndroidRuntime(731):  at edu.activity.SplashScreen$4.run(SplashScreen.java:97) 
01-30 00:56:05.232: ERROR/AndroidRuntime(731):  at java.lang.Thread.run(Thread.java:1096) 

我插入我每次插入數據時,約80個項目,採用類似這種方法:

public void addDBSplosna(SplosnaRazred s) { 
     db.open(); 
     db.insertSplosna(s); 
     db.close(); 
} 

DBAdapter:

public long insertSplosna(SplosnaRazred splosna) { 
     ContentValues initialValues = new ContentValues(); 

     initialValues.put(VREMENSKA, splosna.getVremenska()); 
     initialValues.put(OBETI, splosna.getObeti()); 
     initialValues.put(UPDATED, splosna.getServerUpdated()); 

     return db.insert(TABLE_SPLOS, null, initialValues); 
    } 

有沒有辦法阻止他們爭取數據庫?我應該鎖定數據庫直到完成並釋放它?如果是這樣的話,該怎麼做?

回答

5

您可以使方法addDBSplosna(SplosnaRazred s)synchronized,以確保當時只有一個線程可以寫入數據庫。

+0

這是黃金!這麼簡單,解決了這樣一個煩人的問題!謝謝 – 2012-01-30 08:58:07