0
我有一個應用程序,它預裝了數據庫。複製預加載的數據庫,添加回車
我的臨時副本功能,像這樣
private void copyDatabase() {
AssetManager assetManager = context.getResources().getAssets();
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open(DATABASE_NAME);
out = new FileOutputStream(DATABASE_FILE);
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) > 0){
out.write(buffer, 0, read);
}
} catch (IOException e) {
Log.e("error", e.getMessage());
} finally {
if(in != null) {
try {
in.close();
}catch (IOException e) {
Log.e("error", e.getMessage());
}
}
if(out != null) {
try {
out.close();
}catch (IOException e) {
Log.e("error", e.getMessage());
}
}
}
}
但是在Android 2.2我不斷收到一個錯誤「數據庫磁盤映像格式不正確」。所以我繼續把它從設備上覆制到我的電腦上。果然,它不會打開。我做了兩個文件的十六進制比較,並且有一個字節不同的10個實例。十六進制0D已經在格式錯誤的副本中隨機添加了10次。
複製例程在3.x +中正常工作。我也用相同的方法開發了其他應用程序,並沒有問題。
任何想法?
嘗試使用SQLiteAssetHelper https://github.com/jgilfelt/android-sqlite-asset-helper - 如果您按照說明ZIP或GZIP數據庫,它將防止數據庫損壞與Android版本低於API 10和它在數據庫複製和升級方面也做了所有的「繁重工作」。 – Squonk 2015-03-31 23:13:23
這很奇怪。我使用完全相同的數據重新創建了我的預加載數據庫,現在不會發生錯誤,並且複製正確。 – Kris 2015-03-31 23:37:31
這聽起來好像文件是通過FTP以ASCII(文本)模式複製的。 – 2015-04-01 07:16:29