2013-01-08 89 views
1

我有一個像聯繫人contentprovider數據庫,在該用戶可以捕獲每個聯繫人的圖像捕獲後,我編碼的圖像到base64和保存到文件並更新該圖像字段與該文件的路徑,並同步所有聯繫人到服務器,如果用戶在線,以及我從服務器獲取所有這些數據,而我從文件中提取圖像,我面臨的內存異常base64,如果我在數據庫中保存圖像是解決問題的方法嗎?OutOfmemory異常在Android中的Base64在Android

+0

你應該張貼導致您內存不足的一段代碼。 – dmon

回答

1

在Android中,圖像通常會導致OutOfMemoryException,尤其是當您嘗試編碼整個圖像時。爲此,請在塊中讀取圖像數據,然後在塊上應用編碼後,將塊保存在臨時文件中。當編碼完成,做任何你想要與你的編碼圖像文件做..

下面是從文件編碼圖像,並使用數據塊保存它在一個文件中的代碼..

String imagePath = "Your Image Path";   
    String encodedImagePath = "Path For New Encoded File"; 
    InputStream aInput; 
    Base64OutputStream imageOut = null; 
    try { 
     aInput = new FileInputStream(imagePath); 

     // carries the data from input to output : 
     byte[] bucket = new byte[4 * 1024]; 
     FileOutputStream result = new FileOutputStream(encodedImagePath); 
     imageOut = new Base64OutputStream(result, Base64.NO_WRAP); 
     int bytesRead = 0; 
     while (bytesRead != -1) { 
     // aInput.read() returns -1, 0, or more : 
     bytesRead = aInput.read(bucket); 
     if (bytesRead > 0) { 
      imageOut.write(bucket, 0, bytesRead); 
      imageOut.flush(); 
     } 
     imageOut.flush(); 
     imageOut.close(); 
    } catch (Exception ex) { 
     Log.e(">>", "error", ex); 
    }