我将SQLite数据库移动到SD卡,但有时会引发以下异常:
android.database.sqlite.SQLiteDiskIOException: error code 10: disk I/O error
关于如何防止这种情况发生的任何建议?
答案 0 :(得分:8)
由于您使用的是外部存储,因此您的应用程序必须了解外部存储状态,您可以通过Environment.getExternalStorageState()
获取该状态。
状态为MOUNTED
时,您只能访问外部存储空间。
如果您在设备启动期间尝试打开文件(或SQLite数据库;它只是一个文件!),您将肯定出现问题,因为外部存储未安装直到设备启动(显示主屏幕后)。
解决这个问题的方法是注册IntentFilter
以获得有关外部存储状态的所有更改的通知,并采取相应的行为。
阅读文档总是一个好主意!有关详细信息,请参阅Android文档:http://developer.android.com/reference/android/os/Environment.html
为此目的使用外部存储是可疑的,因为无法控制它何时变得不可用!例如,用户将其设备插入其计算机上的USB,并选择“启用USB大容量存储”选项,以便他们可以从计算机访问其设备的外部存储。坏消息!您的应用将与外部存储断开连接,并且最有可能没有机会进行任何清理IO!
在这种情况下,如果只有可用的数据,您现在可以处理将要放入数据库的所有数据。