gpt4 book ai didi

android - 线程之间的数据库冲突

转载 作者:行者123 更新时间:2023-11-29 15:28:49 25 4
gpt4 key购买 nike

我的应用程序解析三种不同的 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();
}

数据库适配器:

   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);
}

有没有办法阻止他们争夺数据库?我应该锁定数据库直到它完成然后释放它吗?如果是这样,怎么办?

最佳答案

您可以使方法 addDBSplosna(SplosnaRazred s) synchronized , 以确保在同一时间只有一个线程可以写入数据库。

关于android - 线程之间的数据库冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9057951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com