当SimpleCursorAdapter从同一个表

时间:2015-07-23 10:12:35

标签: java android sqlite

我在Android中遇到SQLite数据库问题。

我已经实施了一个内容提供商,通过该应用程序,这非常完美。

在app中的几个点,我有一个列表,它与LoaderManager一起实现SimpleCursorAdapter。这也很好。

现在我有一个后台线程,它在数据库中更新(意味着更新,插入和删除)数据。 我有一个IntentService从服务器下载一些信息并评估给定的信息。基于此,服务人员更新/插入或删除一些信息(通过内容提供商)。

只要用户不在实现列表的活动/片段上(如上所述),一切正常。当服务更新数据库时,它会更新。

但是当用户在实现列表的Activity / Fragment上时(如上所示),一旦服务想要更新或插入一些数据,它就会崩溃。有趣的是删除工作正常。对于插入和更新,我得到以下异常:

java.lang.IllegalStateException: database not open
net.sqlcipher.database.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1593)
net.sqlcipher.database.SQLiteDatabase.insert(SQLiteDatabase.java:1510)
...ContentProvider.insert(ContentProvider.java:297)

它指向内容提供商中的db.udapte(...)语句。

我的假设是,我得到了这个错误,因为SimpleCursorAdapter有一个指向表的opean(可读)指针,因此它已被锁定。

我该如何解决这个问题?

是的,我正在使用SQLCipher。但我也使用默认的Andoird实现遇到了这个问题。

1 个答案:

答案 0 :(得分:0)

我不了解Thread和直接db访问。您告诉过您正在使用ContentProvider进行选择。为什么不使用ContentProvider方法进行更新,插入和删除操作?如果您只使用ContentProvider,那么您肯定会在项目中使用单个SqliteOpenHelper实例,而有多个实例可能会导致您的问题。