2014-03-13 2 views
1

url async 메서드에서 이미지를 호출하려고했습니다. 백그라운드에서 수행 할 때 메모리 부족 오류가 발생합니다. 내 코드는 아래Image Asynctask의 OutOfMemoryError

코드 :

class DownloadAsyncTask extends AsyncTask<ViewHolder1, Void, ViewHolder1> { 

    @Override 
    protected ViewHolder1 doInBackground(ViewHolder1... params) { 
     // TODO Auto-generated method stub 
     // load image directly 
     ViewHolder1 viewHolder = params[0]; 
     try { 
      String url = viewHolder.imageURL.replace(" ", "%20"); 
      URL imageURL = new URL(url); 
      Log.v("Image Url", viewHolder.imageURL); 
      viewHolder.bitmap = BitmapFactory.decodeStream(imageURL.openStream()); 
     } catch (IOException e) { 
      // TODO: handle exception 
      Log.e("error", "Downloading Image Failed"); 
      viewHolder.bitmap = null; 
     } 

     return viewHolder; 
    } 

    @Override 
    protected void onPostExecute(ViewHolder1 result) { 
     // TODO Auto-generated method stub 
     Log.v("Result bitmap", String.valueOf(result.bitmap)); 
     if (result.bitmap == null) { 
      result.frndthumb_image 
        .setImageResource(R.drawable.avatar_image); 
     } else { 
      result.frndthumb_image.setImageBitmap(result.bitmap); 
     } 
    } 
} 

오류 코드 :

03-13 13:40:34.170: E/AndroidRuntime(1919): FATAL EXCEPTION: AsyncTask #3 
03-13 13:40:34.170: E/AndroidRuntime(1919): java.lang.RuntimeException: An error occured while executing doInBackground() 
03-13 13:40:34.170: E/AndroidRuntime(1919):  at android.os.AsyncTask$3.done(AsyncTask.java:278) 
03-13 13:40:34.170: E/AndroidRuntime(1919):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
03-13 13:40:34.170: E/AndroidRuntime(1919):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
03-13 13:40:34.170: E/AndroidRuntime(1919):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
03-13 13:40:34.170: E/AndroidRuntime(1919):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
03-13 13:40:34.170: E/AndroidRuntime(1919):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
03-13 13:40:34.170: E/AndroidRuntime(1919):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
03-13 13:40:34.170: E/AndroidRuntime(1919):  at java.lang.Thread.run(Thread.java:856) 
03-13 13:40:34.170: E/AndroidRuntime(1919): Caused by: java.lang.OutOfMemoryError 
03-13 13:40:34.170: E/AndroidRuntime(1919):  at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
03-13 13:40:34.170: E/AndroidRuntime(1919):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:493) 
03-13 13:40:34.170: E/AndroidRuntime(1919):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:549) 
03-13 13:40:34.170: E/AndroidRuntime(1919):  at com.arrichion.userservices.ChallengesAdapter$DownloadAsyncTask.doInBackground(ChallengesAdapter.java:133) 
03-13 13:40:34.170: E/AndroidRuntime(1919):  at com.arrichion.userservices.ChallengesAdapter$DownloadAsyncTask.doInBackground(ChallengesAdapter.java:1) 
03-13 13:40:34.170: E/AndroidRuntime(1919):  at android.os.AsyncTask$2.call(AsyncTask.java:264) 
03-13 13:40:34.170: E/AndroidRuntime(1919):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
03-13 13:40:34.170: E/AndroidRuntime(1919):  ... 4 more 

답변

0

난 당신이 링크를 아래에서 jarfile가 다운로드 images.just 다운로드 Aquery를 사용하는 것이 좋습니다

https://code.google.com/p/android-query/downloads/detail?name=android-query.0.26.7.jar

전화 번호는

입니다.
AQuery _aq = new AQuery(youractivity context); 
//fetch and set the image from internet, cache with file and memory 
aq.id(R.id.Your imageview object).image("http://www.vikispot.com/z/images/vikispot/android-w.png");