2013-08-06 52 views
1

這裏是我的代碼,當我寫文件錯誤寫入和從臨時緩存文件android讀取位圖?

Bitmap bitmap; 
InputStream is; 

try 
{ 
    is = (InputStream) new URL(myUrl).getContent(); 
    bitmap = BitmapFactory.decodeStream(is); 
    is.close(); 

    //program crashing here 
    File f = File.createTempFile(myUrl,null,MyApplication.getAppContext().getCacheDir()); 
    FileOutputStream fos = new FileOutputStream(f); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
    fos.flush(); 
    fos.close(); 
} 
catch(Exception e) 
{ 
    bitmap = null; 
} 

,這裏是我的代碼從同一文件讀取

Bitmap bitmap; 
try 
{ 
    File f = new File(myUrl); 
    FileInputStream fis = new FileInputStream(f); 
    BufferedInputStream bis = new BufferedInputStream(fis); 
    byte[] bitmapArr = new byte[bis.available()]; 
    bis.read(bitmapArr); 
    bitmap = BitmapFactory.decodeByteArray(bitmapArr, 0, bitmapArr.length); 
    bis.close(); 
    fis.close(); 
} 
catch(Exception e) 
{ 
    bitmap = null; 
} 

該計劃是在創建臨時文件的崩潰第一塊代碼。

編輯:我得到一個libcore.io.ErrnoException

回答

1

UPDATE:我發現這個問題,並固定它,有興趣的人士見下文。

我改變它使用openFileOutput(String,int)和openFileInput(String)方法,我應該從一開始就這樣做。

以下是工作代碼,用於將包含圖像的url的輸入流解碼爲位圖,壓縮位圖並將其存儲到文件中,以及稍後從該文件中檢索所述位圖。

Bitmap bitmap; 
InputStream is; 

try 
{ 
    is = (InputStream) new URL(myUrl).getContent(); 
    bitmap = BitmapFactory.decodeStream(is); 
    is.close(); 

    String filename = "file" 
    FileOutputStream fos = this.openFileOutput(filename, Context.MODE_PRIVATE); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
    fos.close(); 
} 
catch(Exception e) 
{ 
    bitmap = null; 
} 

Bitmap bitmap; 

try 
{ 
    String filename = "file"; 
    FileInputStream fis = this.openFileInput(filename); 
    bitmap = BitmapFactory.decodeStream(fis); 
    fis.close(); 
} 
catch(Exception e) 
{ 
    bitmap = null; 
} 
+0

我很欣賞你回答你自己的問題,但調用openFileOutput()與Context.MODE_PRIVATE不會創建應用程序的緩存目錄中的文件。 – TheIT