2010-08-23 87 views
1

我試圖將我用我的應用拍攝的照片保存到特定目錄。它正在工作,但我正在接近完成應用程序,並希望嘗試全新安裝。我刪除了照片被保存的文件夾,現在它不會重新制作。這是我的代碼。目錄創建失敗... Java,Android

 
PictureCallback jpegCallback = new PictureCallback() { // 
    public void onPictureTaken(byte[] data, Camera camera) { 
     FileOutputStream outStream = null; 
     try {  
       android.os.Environment.getExternalStorageState(); 
      // create a File object for the parent directory 
       File PhotoDirectory = new File(
         android.os.Environment.getExternalStorageDirectory()+ 
         "/GrowJournalPhotos/"+journ_id+"/"+plant_id+"/"); 
     // have the object build the directory structure, if needed. 
     PhotoDirectory.mkdirs(); 
     // create a File object for the output file 
     File outputFile = new File(PhotoDirectory, "photo.jpg"); 
     // now attach the OutputStream to the file object, instead of a String representation 
     outStream = new FileOutputStream(outputFile); //----LINE 82----// 

     // Write to SD Card 
     outStream.write(data); 
     outStream.close(); 
     Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length); 
     setResult(RESULT_OK); 
      finish(); 

     } catch (FileNotFoundException e) { // 
     e.printStackTrace(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } finally { 
     } 
     Log.d(TAG, "onPictureTaken - jpeg"); 
    } 
    }; 

和IO錯誤:

 
08-23 13:26:18.263: WARN/System.err(9515): java.io.FileNotFoundException: /sdcard/GrowJournalPhotos/geo a/1/photo.jpg 
08-23 13:26:18.263: WARN/System.err(9515):  at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:244) 
08-23 13:26:18.263: WARN/System.err(9515):  at java.io.FileOutputStream.(FileOutputStream.java:97) 
08-23 13:26:18.263: WARN/System.err(9515):  at java.io.FileOutputStream.(FileOutputStream.java:69) 
08-23 13:26:18.263: WARN/System.err(9515):  at com.grower.beta.takephoto$3.onPictureTaken(takephoto.java:82) 
08-23 13:26:18.263: WARN/System.err(9515):  at android.hardware.Camera$EventHandler.handleMessage(Camera.java:323) 
08-23 13:26:18.263: WARN/System.err(9515):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-23 13:26:18.263: WARN/System.err(9515):  at android.os.Looper.loop(Looper.java:123) 
08-23 13:26:18.263: WARN/System.err(9515):  at android.app.ActivityThread.main(ActivityThread.java:4595) 
08-23 13:26:18.263: WARN/System.err(9515):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-23 13:26:18.263: WARN/System.err(9515):  at java.lang.reflect.Method.invoke(Method.java:521) 
08-23 13:26:18.263: WARN/System.err(9515):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
08-23 13:26:18.263: WARN/System.err(9515):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
08-23 13:26:18.263: WARN/System.err(9515):  at dalvik.system.NativeStart.main(Native Method) 
08-23 13:26:18.263: DEBUG/CameraDemo(9515): onPictureTaken - jpeg 

我有設置寫入到外部存儲權限。 如果我手動創建目錄,在計算機上安裝驅動器並創建第一個文件夾「/ sdcard/GrowJournalPhotos /」其他所有內容都可以使用。 必要時需要確保應用程序將創建整個目錄。

回答

2
  1. SD卡不必作爲「/ sdcard」路徑被安裝。始終使用android.os.Environment.getExternalStorageDirectory()

  2. 寫入SD卡前,請與android.os.Environment.getExternalStorageState()

  3. 其狀態確保所有目錄創建FileOutputStream實例之前創建的。在你的情況下,這將是:PhotoDirectory.mkdirs()。檢查返回值以確保路徑中的所有目錄均存在。

+0

謝謝。作品如何我期望。我已經改變了我的代碼。讓我知道是否有什麼關閉。 – Brian 2010-08-23 21:12:24

0

這是我在目錄名稱中看到的空間嗎?不要這樣做,或者如果你真的必須,正確地unix - 逃避他們(反斜槓)。

+0

宣佈android.permission.WRITE_EXTERNAL_STORAGE雖然這可能進一步成爲問題的道路。目前的journid是來自用戶的輸入。我嘗試了一個空間仍然是相同的東西

 08-23 14:00:00.223: WARN/System.err(9515): java.io.FileNotFoundException: /sdcard/GrowJournalPhotos/be/3/photo.jpg 
Brian 2010-08-23 18:01:42

+0

如果你嘗試從連接到你的設備/模擬器的ADB外殼mkdir這些目錄會發生什麼? – 2010-08-23 19:59:05

0

確保您已在清單

+0

我在最後一段說過,第一句我已經這樣做了。感謝您的輸入 – Brian 2010-08-23 21:13:46