2011-08-10 55 views
27

我感動SQLite數據庫到SD卡,但有時它會拋出以下異常:SQLiteDiskIOException,錯誤代碼10:磁盤I/O錯誤

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

我如何能防止這種情況發生的任何建議?

+4

爲什麼這是低估。我對此感興趣... – Kurru

+4

是的,這是一個真正的問題。任何幫助? –

+2

我有同樣的問題,但與內部存儲,所以目前的答案不適用。 – Zitrax

回答

8

由於您正在使用外部存儲,因此您的應用程序必須瞭解外部存儲狀態,您可以通過Environment.getExternalStorageState()獲取該狀態。

當狀態爲MOUNTED時,您只能訪問外部存儲。

如果你試圖打開一個文件(或SQLite的數據庫;!它只是一個文件)裝置啓動時,你會肯定有問題,因爲外部存儲沒有安裝直到進入設備啓動(後主屏幕顯示)。

解決方法是註冊IntentFilter以通知外部存儲狀態的所有更改,並相應地執行相應操作。

閱讀文檔總是一個好主意!有關詳細信息,請參閱Android文檔:http://developer.android.com/reference/android/os/Environment.html

爲此目的使用外部存儲是可疑的,因爲無法控制何時不可用!例如,用戶可以將他們的設備插入計算機的USB中,然後選擇「啓用USB大容量存儲」選項,以便他們可以從他們的計算機訪問其設備的外部存儲。壞消息!您的應用程序將與外部存儲器斷開連接,並且最有可能沒有任何清理IO的機會!

在這種情況下,您現在只剩下如何處理將要放入數據庫的所有數據(如果只有這些數據可用)。