Android一加二:更改数据库区域设置失败

Android One Plus Two: Failed to change locale for db

我在我的 Android 项目之一中使用 Sqlite 数据库。它在除 One Plus Two 设备之外的所有设备上都可以正常工作。

我在尝试打开数据库时出现异常。这是崩溃日志。

 12-23 19:14:35.235: E/SQLiteLog(3133): (11) database corruption at line 53216 of [9491ba7d73]
12-23 19:14:35.235: E/SQLiteLog(3133): (11) statement aborts at 7: [SELECT locale FROM android_metadata UNION SELECT NULL ORDER BY locale DESC LIMIT 1] 
12-23 19:14:35.237: E/SQLiteDatabase(3133): Failed to open database '/data/data/com.mycompany.myapp/databases/alcochange.sqlite'.
12-23 19:14:35.237: E/SQLiteDatabase(3133): android.database.sqlite.SQLiteException: Failed to change locale for db '/data/data/com.mycompany.myapp/databases/myapp.sqlite' to 'en_US'.

click here查看完整的崩溃日志

我在这里看到了其他类似的问题,我几乎尝试了所有答案,但没有任何效果。 我试过了 this and this.

编辑: 该设备在 Oxygen Lollipop 上运行。

尝试手动更改语言环境。

使用 SQLite 编辑器打开数据库文件,例如 SQLiteStudio,然后打开 android_metadata table。如果不存在,则创建它。 (您可以使用查询编辑器(工具>打开查询编辑器)和 copy/paste 下面的 DDL 代码创建它)

CREATE TABLE android_metadata ( 
    locale TEXT 
);

要插入记录,您可以 copy/paste 查询编辑器中的这一行:

INSERT INTO android_metadata VALUES ('en_us');

提示:对于 运行 SQLiteStudio 中的查询,您应该按下工具栏中带有 图标的按钮。

我找不到出现此错误的原因,但我通过执行以下操作以某种方式避免了此错误。

以前,我在捆绑包中有一个 .sqlite 数据库,当用户第一次打开我们的应用程序时,我将 .sqlite 数据库从捆绑包复制到正确的位置路径。

但是现在,我已经从 .sqlite 导出原始查询并将其作为 txt 文件添加到捆绑包中。现在,当用户第一次打开应用程序时,我将首先在路径中创建一个空的 .sqlite 文件,然后我从 bundle 的 txt 文件中读取所有 .sql 查询,然后在路径中的 .sqlite 文件上执行它们。