2011-08-19 169 views
0

我正試圖在內部存儲器中存儲一些圖像,這些圖像是base64編碼的字符串。 出於某種原因,他們似乎並沒有存儲,我不知道爲什麼。無法在內部存儲器中存儲圖像

這是存儲它們的功能:

public void createImage(String image, String name){ 
    try{ 
     byte[] imageAsBytes = Base64.decode(image.getBytes(), Base64.DEFAULT); 
     Bitmap img_bitmap = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length); 

     //mCtx is the context. It comes from the main activity 
     FileOutputStream fos = mCtx.openFileOutput(name, Context.MODE_WORLD_READABLE); 
     img_bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); 
     fos.flush(); 
     fos.close(); 

     //Let's check if they're there 
     File f = new File(mCtx.getFilesDir().getPath() + "/" + name + ".png"); 

     if (f.exists()) 
      Log.v(DB_TAG, "Exists"); 
     else 
      Log.v(DB_TAG, "Not exists"); 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
     Log.e(DB_TAG, e.toString()); 
    } 
} 

我不斷收到「不存在」的logcat中。爲什麼會這樣?

+0

你不能寫入內部存儲。除非這是一個蜂窩平板電腦 – Matt

+0

爲什麼?它沒有在android開發網站http://developer.android.com/guide/topics/data/data-data-storage.html#filesInternal – ferguior

+0

中說任何事情,哦,那麼不要那麼着急。 – Matt

回答

0
File f = new File(mCtx.getFilesDir().getPath() + "/" + name); //<-- removed .png! 
if (f.exists()) 
    Log.v(DB_TAG, "Exists"); 
else 
    Log.v(DB_TAG, "Not exists"); 

您將文件保存爲'name',然後將您創建的文件保存爲'name.png'。

+0

哇,它確實存在。然後我有一個更糟的問題:S 爲什麼你不必把「.png」? 感謝que快速幫助。我很感謝它:) – ferguior

+0

因爲你使用的是:'mCtx.openFileOutput(name)',那麼它就會保存這個名字的文件,把它編碼爲PNG並不重要,文件擴展名根本不重要 – Cristian

+0

哦,很高興知道,謝謝! – ferguior

0

BitmapFactory decodeByteArray存在一些已知問題(例如使用PNG - 請參見https://stackoverflow.com/questions/3956641/png-base64-decoding-problem-in-android)。這將是值得記錄從decodeByteArray返回的位圖

Log.v(DB_TAG, "Bitmap = " + bitmap); 

,看它是否非空。

+0

這就是我得到的「Bitmap = [email protected]」。那應該在那裏嗎? – ferguior

+0

是的......這意味着位圖存在。如果它存在,你會看到「null」但我確信克里斯蒂安的回答是正確的,你正在保存「名稱」,並試圖讀取「name.png」,對不起,我沒有發現它 – Torid

+0

謝謝反正Torid :) – ferguior

相關問題