2012-03-12 59 views
0

昨晚我有 this code在家工作,Whatzit是一個很好的幫助。我得到了一切工作(註釋掉了dbFile的存在檢查,並將任何更改複製到我想使用sqlite瀏覽器進行的數據庫中)。從Mac OSX切換到Windows 7後,Android SQLite代碼無法正常工作

今天早上我把我的平板電腦帶到了windows 7的機器上,卸載了應用程序並嘗試從eclipse運行相同的代碼。我不斷收到一個錯誤:

03-12 11:51:39.320: E/AndroidRuntime(20365): Caused by: java.io.IOException: trying to copy the database - ERROR: /data/data/mypackage/databases/restaurant.db: open failed: ENOTDIR (Not a directory)

我已經壓縮了我的項目在我的Mac和它解壓到同一項目目錄Eclipse中的Windows計算機上,在eclipse剛剛進行了刷新。

想對我可能會嘗試的任何輸入?我嘗試卸載應用程序,將.apk複製並重新安裝,但似乎沒有任何效果。謝謝。

*我其實在實際設備上運行此 - 摩托羅拉XOOM 4.0.3

private void copyDataBase(File dbFile) throws IOException { 
    try{ 
     InputStream dbStream = myDbContext.getAssets().open(dbName); 
     Log.e("In copyDataBase", "Environment Directory: " + Environment.getDataDirectory().canRead()); 
     Log.e("In copyDataBase", "Environment Directory: " + Environment.getDataDirectory().canWrite()); 
     Log.e("In copyDataBase", "Environment Directory: " + Environment.getExternalStorageDirectory()); 
     Log.e("In copyDataBase", "opened up file " + dbName + " successfully. - trying " + path.toString()); 
     OutputStream newDbFile = new FileOutputStream(DB_PATH + dbName); 

     byte[] buffer = new byte[1024]; 
     int length; 
     while((length = dbStream.read(buffer)) > 0){ 
      newDbFile.write(buffer); 
     } 

     newDbFile.flush(); 
     newDbFile.close(); 
     dbStream.close(); 
    } 
    catch(IOException e){ 

     throw new IOException("trying to copy the database - ERROR: " + e.getMessage()); 
    } 

} 

canWrite和的的CanRead結果都回來爲假。正如我在這裏打字一樣,這是完美的工作。我不知道爲什麼將平板電腦連接到運行與eclipse相同版本的Windows機器會產生任何影響。

回答

0

你得到的錯誤是說指定的目錄不存在。你在新的虛擬設備上清楚地運行它是否正確? Android的版本與最初開發的版本相同嗎?

+0

沒有這是在實際的平板電腦 - 摩托羅拉Xoom Android 4.0.3。 – cspam 2012-03-12 17:04:54

+0

我在頂部添加了一些代碼。 - 由於某些原因無法讀取或寫入。我希望我現在在家,所以我可以比較。 – cspam 2012-03-12 18:05:11

+0

好吧,我解決了它。我已經吸取了教訓,您需要將Context.getFilesDir用於數據路徑,而不是對其進行硬編碼。我不知道爲什麼/ data/data/packagename /數據庫昨晚工作。我不認爲這與工作在Mac和Windows上有什麼關係。非常神祕。 – cspam 2012-03-12 18:34:39