2012-07-22 172 views
3

我想在內部存儲(而不是外部存儲)上存儲位圖圖像。我寫了這段代碼,但似乎有些問題。因爲當我從DDMS下載圖像時,我無法打開它。Android,如何將圖像存儲在內部存儲器中?

public String writeFileToInternalStorage(Context context, Bitmap outputImage) { 

     String fileName = Long.toString(System.currentTimeMillis()) + ".png"; 

     try { 
      OutputStreamWriter osw = new OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE)); 
      osw.write(outputImage.toString()); 
      Log.i(TAG, "Image stored at: " + fileName); 
     } catch (Exception e) { 
      Log.w(TAG, e.toString()); 
      fileName = null; 
     } 

     return fileName; 
    } 
+0

您試圖使用'outputImage.toString()'將'Bitmap'寫出''String'。我甚至不知道那會給你帶來什麼,但我認爲這不是一個有效的圖像。 [看看這個](http://stackoverflow.com/questions/649154/android-bitmap-save-to-location) – Nate 2012-07-22 10:45:00

回答

6

outputImage.toString()不是圖像:)你放在文件上的內容不是二進制數據,而是一些字符串!

做到這一點的方法是這樣的:

public String writeFileToInternalStorage(Context context, Bitmap outputImage) { 
    String fileName = Long.toString(System.currentTimeMillis()) + ".png"; 

    final FileOutputStream fos = openFileOutput(fileName, Context.MODE_PRIVATE); 
    outputImage.compress(CompressFormat.PNG, 90, fos); 
} 

我直接編碼到瀏覽器,它可能有一些語法錯誤,但代碼應工作。

+0

謝謝親愛的Zelter,但不幸的是,當我使用此代碼時,新紅線出現在「openFileOutput」下方,而我無法運行應用程序。 – Hesam 2012-07-22 10:54:23

+0

它說在課堂上沒有方法,並要求我創建它。 – Hesam 2012-07-22 10:55:41

+0

調用'context.openFileOutput' – Ronnie 2012-07-22 11:07:12

0

的問題是,使用的ToString(),而不是壓縮位圖到一個FileOutputStream:

FileOutputStream out = new FileOutputStream(filename); 
outputImage.compress(Bitmap.CompressFormat.PNG, 90, out); 

內部存儲可以通過上下文進行檢索,也。

File cacheDir = context.getCacheDir(); 
+0

謝謝蒂姆,但它不工作。它拋出「FileNotFoundException」。來自logcat的完整消息是:java.io.FileNotFoundException:/1342996573233.png:打開失敗:EROFS(只讀文件系統) – Hesam 2012-07-22 22:40:57

相關問題