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