我正在使用this方法在我们的assets-directory中将预先存在的sqlite-database复制到第一个应用启动时的app / databases / -directory。这适用于具有不同SDK级别的模拟器和我的4.4设备,但在具有以下logcat消息的2.2.2设备上失败:
sqlite returned: error code = 11, msg = database corruption found by source line 40107
以及SELECT locale FROM android_metadata failed
此错误还有其他SO问题,但我的数据库肯定包含android_metadata
- 表格,其中包含locale
列和en_US
条目(这就是应用运行的原因)许多其他模拟器和更高版本的SDK设备)并且不大(32KB),我读到这可能是一个问题。
更新:我转而使用SQLiteAssetHelper-library,但仍然遇到同样的错误:
从资产中复制数据库...
数据库副本完成
sqlite返回:错误代码= 11,msg =源代码行40107找到的数据库损坏
sqlite返回:错误代码= 11,msg =数据库磁盘映像格式错误
CREATE TABLE android_metadata失败
构建,关闭数据库
时无法设置locale()
似乎SQLiteOpenHelper
(而不是AssetHelper
)正在尝试创建android_metadata
表(即使它已经存在)并因此而失败?
更新2:可以找到完整的堆栈跟踪here
答案 0 :(得分:0)
并添加一个新的android_metadata表,其中包含locale-column和en_us-row
现在您正在使用SQLiteAssetHelper
并给出错误消息(CREATE TABLE android_metadata failed
),请从数据库的打包副本中删除手动android_metadata
表。这将作为通过SQLiteAssetHelper
解压缩数据库的一部分为您创建。