0

I think my error log will describe my question clearly.

I am doing few of image download in a product showcase using Async . But when come to download (larger maybe) image the app forced close , Note: some other product are properly download and display without problem.

Here is some of my code in asynctask , i executed DownloadImage(URL) in doInBackground and store it in a bitmapArray

private Bitmap DownloadImage(String URL) {
Bitmap bitmap = null;
InputStream in = null;
try {
    in = OpenHttpConnection(URL);
    BufferedInputStream bis = new BufferedInputStream(in, 32 * 4096);

    ByteArrayBuffer baf = new ByteArrayBuffer(50);
    int current = 0;
    while ((current = bis.read()) != -1) {
    baf.append((byte) current);
    }
    byte[] imageData = baf.toByteArray();
    bitmap = BitmapFactory.decodeByteArray(imageData,0,imageData.length);


    in.close();
    } catch (IOException e1) {
    e1.printStackTrace();
    }
    return bitmap;
}

Log.txt

02-21 06:54:35.982: E/AndroidRuntime(2026): FATAL EXCEPTION: AsyncTask #3
02-21 06:54:35.982: E/AndroidRuntime(2026): java.lang.RuntimeException: An error occured while executing doInBackground()
02-21 06:54:35.982: E/AndroidRuntime(2026):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
02-21 06:54:35.982: E/AndroidRuntime(2026):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
02-21 06:54:35.982: E/AndroidRuntime(2026):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
02-21 06:54:35.982: E/AndroidRuntime(2026):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
02-21 06:54:35.982: E/AndroidRuntime(2026):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-21 06:54:35.982: E/AndroidRuntime(2026):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
02-21 06:54:35.982: E/AndroidRuntime(2026):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-21 06:54:35.982: E/AndroidRuntime(2026):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-21 06:54:35.982: E/AndroidRuntime(2026):     at java.lang.Thread.run(Thread.java:856)
02-21 06:54:35.982: E/AndroidRuntime(2026): Caused by: java.lang.OutOfMemoryError
02-21 06:54:35.982: E/AndroidRuntime(2026):     at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)
02-21 06:54:35.982: E/AndroidRuntime(2026):     at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:426)
02-21 06:54:35.982: E/AndroidRuntime(2026):     at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:444)
02-21 06:54:35.982: E/AndroidRuntime(2026):     at com.nazartt.angtrading.ShowCase$task.DownloadImage(ShowCase.java:201)
02-21 06:54:35.982: E/AndroidRuntime(2026):     at com.nazartt.angtrading.ShowCase$task.doInBackground(ShowCase.java:129)
02-21 06:54:35.982: E/AndroidRuntime(2026):     at com.nazartt.angtrading.ShowCase$task.doInBackground(ShowCase.java:1)
02-21 06:54:35.982: E/AndroidRuntime(2026):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
02-21 06:54:35.982: E/AndroidRuntime(2026):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
Leon Armstrong
  • 1,285
  • 3
  • 16
  • 41

1 Answers1

1

If you are downloading multiple images then you should use some Caching algorithm like given below, there way you would be able to cache images and load it from cache easily.

  1. Lazy list by Fedor
  2. Universal Image Loader
  3. ImageLoader by Novoda
Community
  • 1
  • 1
Paresh Mayani
  • 127,700
  • 71
  • 241
  • 295