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);
}
有没有办法阻止他们争取数据库?我应该锁定数据库直到完成并释放它?如果是这样的话,该怎么做?
这是黄金!这么简单,解决了这样一个烦人的问题!谢谢 – 2012-01-30 08:58:07