2015-03-31 84 views
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 +中正常工作。我也用相同的方法開發了其他應用程序,並沒有問題。

任何想法?

+1

嘗試使用SQLiteAssetHelper https://github.com/jgilfelt/android-sqlite-asset-helper - 如果您按照說明ZIP或GZIP數據庫,它將防止數據庫損壞與Android版本低於API 10和它在數據庫複製和升級方面也做了所有的「繁重工作」。 – Squonk 2015-03-31 23:13:23

+0

這很奇怪。我使用完全相同的數據重新創建了我的預加載數據庫,現在不會發生錯誤,並且複製正確。 – Kris 2015-03-31 23:37:31

+0

這聽起來好像文件是通過FTP以ASCII(文本)模式複製的。 – 2015-04-01 07:16:29

回答

0

不知道是什麼問題,但我創建了一個新的sqlite數據庫,導入數據,似乎工作。