2013-10-22 2 views
-1

전 세계보기를 사용하여 이미지를로드하고 이미지 미리보기를로드하는 데 범용 이미지 로더를 사용하고 있습니다. 메모리 부족 오류 문제가 계속 발생합니다. 구성, 표시 옵션을 변경하는 많은 메소드를 시도했습니다. 그러나 아무 사용. 이를 해결하기 위해 올바른 방법을 제공하십시오.Android 유니버설 이미지 로더가 메모리 부족 오류

여기에, 보편적 인 이미지 로더 lib 디렉토리를 사용하여 이미지를 표시하는 내 코드입니다

ImageLoader imageLoader = ImageLoader.getInstance(); 
     ImageLoaderConfiguration imageLoaderconfig = new ImageLoaderConfiguration.Builder(
       ImagePreview.this).threadPoolSize(1) 
       .writeDebugLogs().memoryCache(new WeakMemoryCache()) 
       .build(); 
     imageLoader.init(imageLoaderconfig); 
     DisplayImageOptions options = new DisplayImageOptions.Builder() 
       .showStubImage(R.drawable.empty_icon) 
       .bitmapConfig(Config.RGB_565) 
       .showImageForEmptyUri(R.drawable.image_for_empty_url) 

       .imageScaleType(ImageScaleType.IN_SAMPLE_INT).build(); 

     imageLoader.displayImage("file://" 
       + CommonVariables.preview_image_path, image_preview, 
       options, new ImageLoadingListener() { 

        @Override 
        public void onLoadingStarted(String imageUri, View view) { 
         // TODO Auto-generated method stub 

        } 

        @Override 
        public void onLoadingFailed(String imageUri, View view, 
          FailReason failReason) { 
         // TODO Auto-generated method stub 
         findViewById(R.id.pb_pd).setVisibility(
           View.INVISIBLE); // progress bar 
         Toast.makeText(getApplicationContext(), 
           "Oops ! Please try again later", 
           Toast.LENGTH_SHORT).show(); 
        } 

        @Override 
        public void onLoadingComplete(String imageUri, 
          View view, Bitmap loadedImage) { 
         // TODO Auto-generated method stub 
         Animation anim = AnimationUtils.loadAnimation(
           ImagePreview.this, R.anim.fade_in); 
         findViewById(R.id.pb_pd).setVisibility(
           View.INVISIBLE); // progress bar 
         image_preview.setAnimation(anim); 
         anim.start(); 
        } 

        @Override 
        public void onLoadingCancelled(String imageUri, 
          View view) { 
         // TODO Auto-generated method stub 
         findViewById(R.id.pd).setVisibility(View.INVISIBLE); // progress bar 
        } 
       }); 

예외 : (로그인 고양이)

10-22 12:30:00.414: E/AndroidRuntime(6908): FATAL EXCEPTION: main 
10-22 12:30:00.414: E/AndroidRuntime(6908): java.lang.OutOfMemoryError 
10-22 12:30:00.414: E/AndroidRuntime(6908):  at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
10-22 12:30:00.414: E/AndroidRuntime(6908):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:546) 
10-22 12:30:00.414: E/AndroidRuntime(6908):  at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:320) 
10-22 12:30:00.414: E/AndroidRuntime(6908):  at com.doodleblue.dateitpro.Home.decodeSampledBitmapFromUri(Home.java:669) 
10-22 12:30:00.414: E/AndroidRuntime(6908):  at com.doodleblue.dateitpro.Home.addDateTime(Home.java:413) 
10-22 12:30:00.414: E/AndroidRuntime(6908):  at com.doodleblue.dateitpro.Home.callmethods(Home.java:356) 
10-22 12:30:00.414: E/AndroidRuntime(6908):  at com.doodleblue.dateitpro.Home.onCreate(Home.java:236) 
10-22 12:30:00.414: E/AndroidRuntime(6908):  at android.app.Activity.performCreate(Activity.java:5020) 
10-22 12:30:00.414: E/AndroidRuntime(6908):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
+0

이미지를로드하지 것인가? – KOTIOS

+0

코드와 오류는 어디에 있습니까? – GrIsHu

+0

@GrIsHu 내 코드가 게시됩니다. –

답변

0

이미지의 썸네일을 만들어보십시오. 이것은 작은 경우 이미지가 가상 메모리에로드 할 때이 오류가 발생 나를

final int THUMBSIZE = 64; 
Bitmap ThumbImage = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(imagePath), 
        THUMBSIZE, THUMBSIZE); 
0

일했다. 비트 맵 이미지를 만들어 해결할 수 있습니다. 배열의 모든 드로어 블을 가져 와서 다음과 같이 리 스케일링 된 비트 맵을 만듭니다.

Bitmap bit = BitmapFactory.decodeResource(getApplicationContext() 
      .getResources(), drawable); 
    if (bit != null) { 
     Bitmap resizedBitmap = Bitmap.createScaledBitmap(bit, width, 
       height, true); 
     imageView.setBitmap(resizedBitmap); 
     } 

재배 율화 된 비트 맵보다 가상 메모리를 가지고 여기서 R 유 화상 diplaying 쉽게

BitmapDrawable bd=(BitmapDrawable) this.getResources().getDrawable(R.drawable.icon); 
int height=bd.getBitmap().getHeight(); 
int width=bd.getBitmap().getWidth(); 
+0

예, 여기에서이 방법을 사용하여 이미지의 너비와 높이를 정확히 알 수 있습니까? –

+0

수정 된 답변 확인. 너비와 높이를 가져 오는 방법입니다. – Sridhar

+0

너비와 높이를 150dp로 잡고 그리드보기에 표시하면됩니다. 이것은 분명히 당신을 도울 것입니다. – Sridhar