【发布时间】:2016-04-25 22:50:36
【问题描述】:
我在某些设备上遇到上述错误(非常罕见,到目前为止只有 2 次):
android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 3850)
at android.database.sqlite.SQLiteConnection.nativeExecuteForString(Native Method)
at android.database.sqlite.SQLiteConnection.executeForString(SQLiteConnection.java:679)
at android.database.sqlite.SQLiteConnection.setJournalMode(SQLiteConnection.java:361)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:236)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:200)
at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806)
at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669)
at ***.a(***.java:115)
我的代码中的第 115 行如下:
// here the exception occurs
SQLiteDatabase db = SQLiteDatabase.openDatabase(pathApp, null, SQLiteDatabase.OPEN_READONLY);
// ...
db.close();
故事
我所做的如下:
- 应用拥有root权限
- 它将数据库从另一个应用程序复制到它自己的目录中
- 它试图打开这个数据库并读取一些数据
- 它再次关闭文件
就是这样。这适用于数千台设备。我的应用程序肯定只在原地访问数据库,我对此完全确定
问题
有谁知道是什么导致了这个问题?
可能是有趣的事实
- 这 2 台设备是 OnePlus2
- 有人告诉我更新到 Oxygen 2.1 后出现问题
【问题讨论】:
-
我也突然收到有关此错误的用户报告(自 9 月 25 日以来;在此之前它从未出现过)。所有实例都在一台设备上并运行 Android 5.1.1。也许该设备收到了导致此问题的最新系统更新?
-
我所知道的两个受影响的设备确实获得了系统更新...到 Oxygen 2.1...但我对此一无所知...而且还没有找到任何东西...
-
终于找到了解决方案:-)。将 sqlite 二进制文件添加到您的应用程序中,找出哪个在设备上运行,然后将数据库转储到控制台并解析输出......这甚至在 OnePlus2 上也能正常工作
-
令人惊讶的是我在 OnePlus2 上遇到了同样的问题
-
@prom85,你是怎么做到的......你能详细说明你的答案吗......(我们可以通过聊天继续)
标签: android sqlite android-sqlite