我在我的一个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'.
Run Code Online (Sandbox Code Playgroud)
请单击此处查看完整的崩溃日志
我在这里看过其他类似的问题,我几乎尝试了所有答案,但没有任何效果.我试过这个和这个.
编辑:该设备在氧气棒棒糖上运行.
在我的应用程序中使用SQLiteAssetHelper时,我在某些设备上遇到崩溃,最重要的是在OnePlus设备上.现在我在这里读到它与数据库存储的目录有关.
现在我正在尝试找到一种解决方法,目前我能想出的最好的是这样的构造函数
public MySubclass(Context context) {
super(context, databaseName, context.getFilesDir() + "/databases", null, databaseVersion);
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?还是这种方法存在其他问题?
编辑
例外是
Fatal Exception: android.database.sqlite.SQLiteException: Can't upgrade read-only database from version x to y: /data/data/my.package.id/databases/database.db
Run Code Online (Sandbox Code Playgroud)
对不起,我链接了错误的SO问题:这是正确的.在那里它说'OnePlus能够将数据库复制到/data/data/package-name/databases/filename.db,但它不允许访问该数据,我对此没有任何线索.
我已将资产中的db文件复制到app数据库并成功复制.当我在任何表上查询时,它不返回这样的表异常.我从该手机中获取了db文件,并且它具有所需的所有表.我知道它有点奇怪,但这个错误只出现在OnePlusTwo设备上.所以我的问题是这是一个设备特定问题或其他任何人面临的一般问题.如果有人在任何其他手机上遇到此问题或知道如何解决此问题,请提及.我没有发布任何代码,因为它只出现在一个设备上,但如果有人需要,请提及我将发布该部分