- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们的 Android 应用程序中出现大量 SQLiteDiskIOException
错误,堆栈跟踪类似于以下内容:
E/AndroidRuntime( 2252): Caused by: android.database.sqlite.SQLiteDiskIOException: disk I/O error
E/AndroidRuntime( 2252): at android.database.sqlite.SQLiteQuery.native_fill_window(Native Method)
E/AndroidRuntime( 2252): at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:75)
E/AndroidRuntime( 2252): at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:288)
E/AndroidRuntime( 2252): at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:269)
E/AndroidRuntime( 2252): at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:171)
E/AndroidRuntime( 2252): at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:248)
E/AndroidRuntime( 2252): at com.company.android.CActivity$QueryTask.doInBackground(CActivity.java:1660)
这最近从几周前开始发生,但在开始报告此问题的确切版本中没有发生重大的数据库更改。尽管有(我相信)适当的索引,但在查询完成后,在 cursor.moveToFirst()
调用中报告此异常的次数超出了我们的预期,正如您从堆栈跟踪中看到的那样。到目前为止,我们已经完全无法重现。
查询有点复杂,有3个left join。下面是一个有代表性的查询,其中一些标识列已更改以保护无辜者。
select distinct c._id as _id,c.type as type,c.name as name,c.slug as slug,c.description as description,c.extra1 as extra1,c.extra2 as extra2,c.extra3 as extra3,c.extra4 as extra4,c.extra5,c.extra6 as extra6,c.extra7 as extra7,c.extra8 as extra8, c.extra9 as extra9,c.sslug as sslug,
c2.name as sname,
p.type as prel,
em.dS as dS,em.eS as eS
from cse as c
left join cse as c2 on c.sslug=c2.slug
left join emed as em on c.slug=em.slug
left join pre as p on c.sslug=p.slug
where c.pslug='slug' AND c.user='user' AND c.csource='csource'
order by c.type asc, c.extra6 desc, c.sortorder asc
其他消息来源暗示我们试图提取过多数据,但事实并非如此。我们能够获得完整数据库行数的三个用户案例显示:cse < 2000 个条目,包含 <150 个条目,并且pre 有 0 或 7 个条目。此外,查询中的“解释查询计划”表示所有连接都是针对索引列完成的。
在我们看到的每种情况下,用户都在各种设备(DROID、Hero、EVO,可能还有其他设备)上运行 Android 2.1。值得注意的是,我们还没有在我们拥有的几台 G1 设备上看到这种情况,即使它们加载了其他应用程序也是如此。
最后,卸载并重新安装已证明可以成功解决问题,尽管可能只是暂时的。
我担心这个问题是 Android 2.1 中数据损坏的结果。有没有人对要研究的内容有可能的建议?这可能与this Android bug on SQLiteDatabaseCorruptException有关吗?
非常感谢指导和解决方案。
最佳答案
您似乎遇到了多线程问题,一个线程试图获取数据,而另一个线程或多个线程试图将一些数据插入您的表中,因为异常是从方法 (getCount) 中抛出的。
也别忘了; SQLite 游标不是内部同步的,所以如果你从多个线程使用这个游标,你应该执行你自己的同步机制。
关于android - Android 中的 SQLiteDiskIOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3220482/
我的 android 应用程序中没有任何与数据库相关的代码。不过,我确实看到在我的应用程序中使用 androidx 导致与数据库相关的崩溃。请帮助我理解并找到解决此问题的方法。 Fatal Excep
我们的 Android 应用程序中出现大量 SQLiteDiskIOException 错误,堆栈跟踪类似于以下内容: E/AndroidRuntime( 2252): Caused by: andr
我收到 SQLiteDiskIOExceptions 的报告已有一段时间了(通过 Flurry/acra)。我无法在本地重现该问题,但这是我最常发生的崩溃,在糟糕的一天每 50 个 session 发
最近,我遇到了与使用SQLiteOpenHelper有关的问题。 很少有用户报告我无法重现的错误: android.database.sqlite.SQLiteDiskIOException: dis
我在 Android O 上使用 Room 数据库,不时遇到 SQLiteDisckIOException,我尝试解决问题,但堆栈没有告诉我失败点在哪里。有人可以给我一些提示或如何解决此类问题吗?这里
我没有在我的应用程序中使用 sql lite,但它抛出了这个错误。关于为什么会这样有什么想法吗? android.database.sqlite.SQLiteDiskIOException: erro
我在我的一些应用程序上集成了 Bugsense,今天我在两个应用程序中遇到了两次崩溃(但我没有在这个应用程序上使用任何数据库)下一个输出: Error Message android.database
我正在使用这段代码在 android 中创建一个数据库: public class PackageDBHelper extends SQLiteOpenHelper{ //The Android's
我在某些设备上遇到上述错误(很少见,到目前为止只有 2 次): android.database.sqlite.SQLiteDiskIOException: disk I/O error (code
我将 SQLite 数据库移动到 SD 卡,但有时会抛出以下异常: android.database.sqlite.SQLiteDiskIOException: error code 10: disk
我正在尝试在调用 onupgrade 方法时从我的数据库备份表。我正在使用此处提供的解决方案 Android Sqlite onupgrade delete table from database .
我有很多客户遇到标题中提到的异常,但我无法在我的任何设备上重现它。 错误报告似乎表明该错误仅发生在索尼设备上,但我似乎找不到任何关于索尼在 Android 上对其数据库进行任何有趣操作的报告。 触发这
我写了一些用于删除数据库文件夹的代码。它删除数据库但也抛出错误。请建议我如何解决这个问题。 删除数据库代码 public void deleteDB() { try {
我有一个使用 SQLite 数据库的应用程序。 我在应用程序启动时创建了数据库,调用了 RSSDatabase 的构造函数,它工作正常。单击按钮后,我从 RSS 提要获取数据并将数据插入 AsyncT
我在我的应用程序中使用 helpshift 并捕获了这次崩溃。它发生在某些设备中,但不是全部。请帮我解决这个崩溃。 Fatal Exception: android.database.sqlite.S
我收到以下错误: android.database.sqlite.SQLiteDiskIOException: error code 10: disk I/O error at android
我是一名优秀的程序员,十分优秀!