2012-06-28 6 views
0

В моем приложении это исключение, пожалуйста, предложите мне, как я могу устранить это исключение: - Я пытался изменить код Imageloader, но это не удалось.Как удалить это исключение и что означает это исключение?

//decode image size 
     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 
     BitmapFactory.decodeStream(new FileInputStream(f),null,o); 
     /* 
     * options.inJustDecodeBounds = true; 
BitmapFactory.decodeResource(res, resId, options); 

// Calculate inSampleSize 
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); 

// Decode bitmap with inSampleSize set 
options.inJustDecodeBounds = false; 
return BitmapFactory.decodeResource(res, resId, options); 

     * 
     * 
     * 
     * */ 
    // Calculate inSampleSize 
     o.inSampleSize = calculateInSampleSize(o,100,100); 
     o.inJustDecodeBounds = false; 
     //Find the correct scale value. It should be the power of 2. 
     // final int REQUIRED_SIZE=70; 
     //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; 
//   } 

       //decode with inSampleSize 
      //   BitmapFactory.Options o2 = new BitmapFactory.Options(); 
       //    
      //   o2.inSampleSize=2; 

     return BitmapFactory.decodeStream(new FileInputStream(f), null, null); 

Что плохого в коде выше, так как исключение в этом больше появляться секции ... случается

06-28 10:53:36.676: E/dalvikvm-heap(595): 960000-byte external allocation too large for this process. 
    06-28 10:53:36.806: E/GraphicsJNI(595): VM won't let us allocate 960000 bytes 
06-28 10:53:36.836: E/AndroidRuntime(595): FATAL EXCEPTION: AsyncTask #1 
06-28 10:53:36.836: E/AndroidRuntime(595): java.lang.RuntimeException: An error occured while executing doInBackground() 
06-28 10:53:36.836: E/AndroidRuntime(595):  at android.os.AsyncTask$3.done(AsyncTask.java:200) 
06-28 10:53:36.836: E/AndroidRuntime(595):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 
06-28 10:53:36.836: E/AndroidRuntime(595):  at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
06-28 10:53:36.836: E/AndroidRuntime(595): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at java.lang.Thread.run(Thread.java:1019) 
    06-28 10:53:36.836: E/AndroidRuntime(595): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
    06-28 10:53:36.836: E/AndroidRuntime(595): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:470) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at com.rentfaster.utilities.ImageLoader.decodeFile(ImageLoader.java:161) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at com.rentfaster.utilities.ImageLoader.getBitmap(ImageLoader.java:94) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at com.rentfaster.handler.DetailPhotoHandler.imagefecher(DetailPhotoHandler.java:211) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at com.rentfaster.handler.DetailPhotoHandler.characters(DetailPhotoHandler.java:153) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at org.apache.harmony.xml.ExpatParser.text(ExpatParser.java:165) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at org.apache.harmony.xml.ExpatParser.appendBytes(Native Method) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:518) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at or g.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:479) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:318) 
06-28 10:53:36.836: E/AndroidRuntime(595):  at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:275) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at com.rentfaster.home.PropertyDetail$Photostask.doInBackground(PropertyDetail.java:1174) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at com.rentfaster.home.PropertyDetail$Photostask.doInBackground(PropertyDetail.java:1) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at android.os.AsyncTask$2.call(AsyncTask.java:185) 
    06-28 10:53:36.836: E/AndroidRuntime(595): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
    06-28 10:53:36.836: E/AndroidRuntime(595): ... 4 more 
+0

Возможный дубликат [java.lang.OutOfMemoryError: размер растрового изображения превышает бюджет VM - Android] (http: // stackoverflow.com/questions/1949066/java-lang-outofmemoryerror-bitmap-size-превышает-vm-budget-android) – Praveenkumar

+0

Показанный код поможет получить ответ. У вас закончилась загрузка загрузочного битового массива. Это может быть вызвано самой нагрузкой или (скорее) утечкой памяти в другом месте вашей системы. –

+0

Вы можете увидеть мой [ответ] [1] по той же проблеме. [1]: http://stackoverflow.com/questions/10737582/bitmap-size-exceeds-vm-budget-error-android/10738115#10738115 – Shrikant

ответ

1

Вы можете увидеть мой answer по тому же вопросу.

Если вам нужна дополнительная помощь, пожалуйста, дайте мне знать.

Спасибо :)

UPDATE:

Вы использовали:

BitmapFactory.decodeStream(new FileInputStream(f),null,o); 

Этот метод создает битовый массив и возвращает растровые, вы не поймать, что растровое изображение.

вы должны использовать что-то вроде:

Bitmap bmp = BitmapFactory.decodeStream(new FileInputStream(f),null,o); 

Вы должны создать все варианты первой, а затем вызвать метод decodeStream(). После вызова этого метода не возникает эффекта создания параметров.

Вы использовали варианты, но всегда стараются использовать все возможные варианты , которые можно использовать, например, следующее:

options.inScaled = true; 
options.inPurgeable = true; 

// to scale the image to 1/8 
options.inSampleSize = 8; 

Всегда вызывайте метод bitmap.recycle() как только вы использовали растровое изображение.

Если все эти решения не работают, то, как я предложил, используйте плагин MAT for eclipse, потому что, конечно, у вас будет утечка памяти в вашем коде.

+0

Пожалуйста, смотрите мой код и помочь мне, где я ll change for rectify .. – sandee

+0

См. мой обновленный ответ. – Shrikant

0

Ошибка по этой причине ...

06-28 10: 53: 36,836: E/AndroidRuntime (595): Вызванный: java.lang.OutOfMemoryError: размер растрового изображения превышает бюджет VM

Проверить link

link2

Это поможет вам.

Благодаря

0

Похоже, что у вас есть утечка памяти, растровые изображения в вашей деятельности не были должным образом освобождены сборщиком мусора, потому что они перешли ссылки на их деятельность. Попытайтесь контролировать использование кучи с помощью команды

Смежные вопросы