SQLiteDiskIOException错误代码为10:磁盘I/O错误。

32

我将一个SQLite数据库移动到了SD卡上,但有时会抛出以下异常:

android.database.sqlite.SQLiteDiskIOException: error code 10: disk I/O error

有什么建议可以防止这种情况发生吗?


4
为什么这个被踩了?我也很感兴趣…… - Kurru
4
是的,这是一个真正的问题。需要帮忙吗? - Bao Le
3
我有同样的问题,但是与内部存储有关,所以当前的答案不适用。 - Zitrax
任何“磁盘I/O错误”都与文件系统有关。内部存储可能会填满,因此您不能将其视为无限资源! - escape-llc
1个回答

9

由于您正在使用外部存储,因此您的应用程序必须知道外部存储的状态,您可以通过Environment.getExternalStorageState()获取该状态。

只有当状态为MOUNTED时,才能访问外部存储。

如果您试图在设备启动期间打开文件(或SQLite DB;它只是一个文件!),那么您肯定会遇到问题,因为直到设备启动后(显示主屏幕后)才会挂载外部存储。

解决这个问题的方法是注册IntentFilter以接收所有外部存储状态的更改通知,并相应地处理。

阅读文档始终是个好主意!请参见Android文档以获取详细信息:http://developer.android.com/reference/android/os/Environment.html

为此目的使用外部存储是可疑的,因为您无法控制何时变为不可用!例如,用户将设备连接到计算机上并选择“启用USB大容量存储”选项,以便从计算机访问其设备的外部存储。坏消息!您的应用程序将与外部存储断开连接,并且很可能没有机会进行任何清理IO!

在这种情况下,您现在需要考虑将所有要放入数据库中的数据放在哪里,如果只有它可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接