2013-07-02 4 views
0

Я выбираю изображение 700kb из галереи и получаю исключение IllegalArgumentException. Я связываю это с ussage recycle(), чтобы сохранить некоторую память. Это актуально, потому что я начал получать OutOfMemoryError, поэтому я думаю, что мне нужно использовать утилиту. Я назвал это неправильно, или есть некоторые правила, как использовать его?Ошибка при выборе из галереи

ошибка:

07-02 10:25:27.466: E/AndroidRuntime(2422): FATAL EXCEPTION: main 
07-02 10:25:27.466: E/AndroidRuntime(2422): java.lang.IllegalArgumentException: Cannot draw recycled bitmaps 
07-02 10:25:27.466: E/AndroidRuntime(2422):  at android.view.GLES20Canvas.drawBitmap(GLES20Canvas.java:778) 
07-02 10:25:27.466: E/AndroidRuntime(2422):  at android.view.GLES20RecordingCanvas.drawBitmap(GLES20RecordingCanvas.java:117) 

вызов:

Intent intent = new Intent(); 
intent.setType("image/*"); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
startActivityForResult(Intent.createChooser(
intent, "Select Picture"), 31); 

onResult:

if (requestCode == 31 && resultCode == RESULT_OK && null != data) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

      Cursor cursor = getContentResolver().query(selectedImage, 
        filePathColumn, null, null, null); 
      cursor.moveToFirst(); 

      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String picturePath = cursor.getString(columnIndex); 
      cursor.close(); 
      Bitmap bitmap = BitmapFactory.decodeFile(picturePath); 
      pho1.setImageBitmap(bitmap); 
      // ImageView imageView = (ImageView) findViewById(R.id.imgView); 
      // imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
      // 

      // Bitmap bitmap = (Bitmap) data.getExtras().get("data"); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); 
      byte[] byte_arr = stream.toByteArray(); 

      photo1 = Base64.encodeToString(byte_arr, Base64.DEFAULT); 
      bitmap.recycle(); 
      bitmap = null; 
      byte_arr=null; 

      try { 
       stream.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
+0

http://stackoverflow.com/a/2508138/1168654 –

+0

извините, но в чем разница? – Yarh

+1

вы пытаетесь преобразовать изображение в String ... просто посмотрите на это ans: http://stackoverflow.com/a/12239626/1168654 –

ответ

0

Пожалуйста, удалите bitmap.recycle(); заявление.