32

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

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

关于如何防止这种情况发生的任何建议?

4

1 回答 1

9

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

您只能在状态为 时访问外部存储MOUNTED

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

解决此问题的方法是注册一个IntentFilter以通知外部存储状态的所有更改,并采取相应的行为。

阅读文档总是一个好主意!有关详细信息,请参阅 Android 文档:http: //developer.android.com/reference/android/os/Environment.html

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

在这种情况下,您现在只剩下将要放入数据库中的所有数据的“做什么”(如果只有这些数据可用)。

于 2011-10-21T14:36:04.563 回答