2012-12-08 65 views
1

我一直在嘗試將JPG圖像保存到SD卡,然後將其縮小並顯示在ImageView中(由於原始大小導致內存不足錯誤)。Android:將文件保存到SD卡時出錯

下面是我用它來保存文件的方法:

public void saveImage(String src) throws IOException{ 
     URL url = new URL (src); 
     InputStream input = url.openStream(); 
     try {  
      File storagePath = Environment.getExternalStorageDirectory(); 
      OutputStream output = new FileOutputStream (new File(storagePath, "myImage.jpg"));  
      try {   
       byte[] buffer = new byte[1024];   
       int bytesRead = 0;   
       while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) { 
         output.write(buffer, 0, bytesRead);   
       }  
      } 
      finally {   
       output.close();  
      } 
     } 

     finally {  
      input.close(); 
     } 
    } 

當年這裏是當我調用該方法,然後嘗試將縮小圖像加載到內存中,並把它放到ImageView的:

try { 
      saveImage(src); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     BitmapFactory.Options options = new BitmapFactory.Options(); 

     options.inSampleSize = 20; 



     File storagePath = Environment.getExternalStorageDirectory(); 
     File file = new File(storagePath, "myImage.jpg"); 

     Bitmap scaledDownImage = BitmapFactory.decodeFile(file.getAbsolutePath(), options); 


     imageFrame1.setImageBitmap(scaledDownImage); 

然而,當我嘗試運行此,我得到的logcat的消息說:

「java.io.FileNotFoundException:到/ mnt/SDCA RD/myImage.jpg:打開失敗: EACCES(拒絕)」

,我也做了一定

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

添加到清單。

有沒有人有任何想法?

編輯:錯誤發生在第107行和第72行,這意味着它發生在我嘗試保存圖像時。

凹凸:有人嗎?會真的很感激一些建議。

+0

你確定你已經保存了圖像,然後再嘗試打開它?另外,'inSampleSize = 20'似乎有點高。 – Doomsknight

+0

當我嘗試保存時發生錯誤,所以可能不會。而且圖像絕對巨大,我想將它縮小到非常小,所以20只是一個起點。 – Hallow

+0

你可以分享'url.openStream()'的堆棧跟蹤嗎?你不是想在主線程中進行網絡操作,對嗎? – Akdeniz

回答

0

問題解決了!結果我需要改變的只是saveImage方法中字節緩衝區的大小。這是在1024年,但它後升高到8192它工作正常!

感謝大家elses的建議。

-1

使用以下命令:

String path = Environment.getExternalStorageDirectory() 
           .toString() + File.separator + "myImage.jpg"; 
OutputStream output = new FileOutputStream (path,true); 
+0

我編輯了代碼將其放入,並且仍然在相同的位置收到相同的錯誤消息。 – Hallow