2013-10-17 47 views
1

在我的android應用程序中,我必須允許用戶單擊按鈕打開圖庫並選擇圖像。然後需要將特定的選定圖像加載到我的佈局(UI)中的圖像視圖中。我有一些代碼,但它來java.lang.outofmemory.Please任何人都可以幫助我?Android:應用程序在上傳圖像時在設備上崩潰,java.lang.outofMemoryError

+0

您正在加載的位圖可能對測試設備上可用的內存量太大。或者,您可能一次將太多位圖加載到庫中。人們經常碰到這種情況,在處理Android上的位圖時,必須對代碼進行一些預先考慮。這裏是由羅曼蓋伊介紹這個話題:https://dl.google.com/io/2009/pres/Th_0230_TurboChargeYourUI-HowtomakeyourAndroidUIfastandefficient.pdf – Turnsole

+0

@Tnsnsole謝謝你的工作很好 – shakthivel

回答

3

你應該解碼在onActivityResult()方法中的圖像URI。 將此方法調用decodeBitmap。

/** 
    * This is very useful to overcome Memory waring issue while selecting image 
    * from Gallery 
    * 
    * @param selectedImage 
    * @param context 
    * @return Bitmap 
    * @throws FileNotFoundException 
    */ 
    public static Bitmap decodeBitmap(Uri selectedImage, Context context) 
      throws FileNotFoundException { 
     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 
     BitmapFactory.decodeStream(context.getContentResolver() 
       .openInputStream(selectedImage), null, o); 

     final int REQUIRED_SIZE = 100; 

     int width_tmp = o.outWidth, height_tmp = o.outHeight; 
     int scale = 1; 
     while (true) { 
      if (width_tmp/2 < REQUIRED_SIZE || height_tmp/2 < REQUIRED_SIZE) { 
       break; 
      } 
      width_tmp /= 2; 
      height_tmp /= 2; 
      scale *= 2; 
     } 

     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize = scale; 
     return BitmapFactory.decodeStream(context.getContentResolver() 
       .openInputStream(selectedImage), null, o2); 
    } 

有關詳情,請儘管話題顯示位圖高效

http://developer.android.com/training/displaying-bitmaps/index.html

希望這有助於。

+0

謝謝你很多..工作精細.. – shakthivel

相關問題