【发布时间】:2012-11-19 16:37:21
【问题描述】:
我正在尝试在我的应用中使用与 WebService 进行事件同步的自定义日历。
一切都很好(嗯,不是真的)。
Calendar Activity 启动 AsyncTask 以获取当前月份事件并将它们存储在数据库中,onPostExecute 方法更新视图以正确标记每一天。
我的问题是当用户进入日历活动然后多次快速返回主要活动时,比如说
Main Activity > Calendar Activity(按返回按钮)> Main Activity > Calendar Activity(按返回按钮)> ...
此时 Activity 因database lock has not been available for 30 sec. 而冻结或应用因SQLiteConstraintException: error code 19 而崩溃
编辑:
SQLiteConstraintException行为不再发生
因为更新在我的应用程序中非常重要,所以每次我重新进入日历活动时,我都会删除数据库并用服务器新数据重新填充它,即使它是相同的,并且此时就是锁定的位置。
编辑:
我已将
Delete > Insert样式更改为:Update所有数据(设置flag列=0)>Insert新数据(设置flag列=1)>Delete(其中flag列=0)
我已经尝试过this 解决方案来取消活动结束时的AsyncTask,但没有成功
我确定问题是我没有完全了解我正在做的事情的过程,所以我错过了一些非常重要(或基本)的东西。
任何帮助改进我的代码或只是指出我正确的方向,将不胜感激。
提前致谢!
编辑:
我的应用程序有一个
Aplication,它负责创建单个数据库连接 (getWriteableDatabase();),这个独特的连接可以通过MyApp.getDatabase();方法访问。
【问题讨论】:
-
SQLiteConstraintException应该与数据库锁问题无关。例外是代码中的错误,例如插入带有null的内容,其中定义了sqlite 表NOT NULL。 stackoverflow.com/questions/9599809/… 可能是锁定问题的解决方案 -
@zapl 你说得对,
SQLiteConstraintException被抛出是因为另一个问题,与这个问题无关。现在已经解决了。谢谢!
标签: android sqlite android-asynctask