2012-06-12 4 views
0

webservice에서 listview로 이미지를 보여주고 있는데 응용 프로그램을 테스트하고 있다고 가정합니다. 6 시간이 예외는 제게 도움이됩니다. AsyncTask를 사용하여 웹 서비스를 호출하고 있습니다.이 예외의 의미는 무엇입니까?

06-12 14:49:53.132: E/dalvikvm-heap(3071): Out of memory on a 1920016-byte allocation. 
06-12 14:49:53.160: E/AndroidRuntime(3071): FATAL EXCEPTION: AsyncTask #3 
06-12 14:49:53.160: E/AndroidRuntime(3071): java.lang.RuntimeException: An error occured while executing doInBackground() 
    06-12 14:49:53.160: E/AndroidRuntime(3071): at android.os.AsyncTask$3.done(AsyncTask.java:278) 
06-12 14:49:53.160: E/AndroidRuntime(3071): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
06-12 14:49:53.160: E/AndroidRuntime(3071): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
06-12 14:49:53.160: E/AndroidRuntime(3071): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
06-12 14:49:53.160: E/AndroidRuntime(3071): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
06-12 14:49:53.160: E/AndroidRuntime(3071): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
06-12 14:49:53.160: E/AndroidRuntime(3071): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
06-12 14:49:53.160: E/AndroidRuntime(3071):  at java.lang.Thread.run(Thread.java:856) 
06-12 14:49:53.160: E/AndroidRuntime(3071): Caused by: java.lang.OutOfMemoryError 
06-12 14:49:53.160: E/AndroidRuntime(3071): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
06-12 14:49:53.160: E/AndroidRuntime(3071): at an droid.graphics.BitmapFactory.decodeStream(BitmapFactory.java:493) 
06-12 14:49:53.160: E/AndroidRuntime(3071):  at com.rentfaster.utilities.ImageLoader.decodeFile(ImageLoader.java:142) 
06-12 14:49:53.160: E/AndroidRuntime(3071):  at com.rentfaster.utilities.ImageLoader.getBitmap(ImageLoader.java:78) 
06-12 14:49:53.160: E/AndroidRuntime(3071): at com.rentfaster.handler.DetailPhotoHandler.imagefecher(DetailPhotoHandler.java:211) 
    06-12 14:49:53.160: E/AndroidRuntime(3071): at com.rentfaster.handler.DetailPhotoHandler.characters(DetailPhotoHandler.java:153) 
06-12 14:49:53.160: E/AndroidRuntime(3071): at org.apache.harmony.xml.ExpatParser.text(ExpatParser.java:163) 
06-12 14:49:53.160: E/AndroidRuntime(3071): at org.apache.harmony.xml.ExpatParser.appendBytes(Native Method) 
06-12 14:49:53.160: E/AndroidRuntime(3071): at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:513) 
    06-12 14:49:53.160: E/AndroidRuntime(3071): at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:474) 
    06-12 14:49:53.160: E/AndroidRuntime(3071): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:321) 
    06-12 14:49:53.160: E/AndroidRuntime(3071): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:279) 
06-12 14:49:53.160: E/AndroidRuntime(3071): at com.rentfaster.home.PropertyDetail$Photostask.doInBackground(PropertyDetail.java:1174) 
    06-12 14:49:53.160: E/AndroidRuntime(3071): at com.rentfaster.home.PropertyDetail$Photostask.doInBackground(PropertyDetail.java:1) 
06-12 14:49:53.160: E/AndroidRuntime(3071):  at android.os.AsyncTask$2.call(AsyncTask.java:264) 
06-12 14:49:53.160: E/AndroidRuntime(3071):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
06-12 14:49:53.160: E/AndroidRuntime(3071):  ... 4 more 
06-12 14:50:02.882: E/parse exception0(3258): dont know why 
06-12 14:50:02.882: E/XML Error(3258): java.net.MalformedURLException: Protocol not found: &area=53.447557,-113.460058,53.447557,-113.460058&max=100 
06-12 14:50:02.921: E/MapActivity(3258): Couldn't get connection factory client 

난 아직도, 내가 좀 스트림에서 오는 비트 맵 디코딩하는 동안은 메모리가 부족

//decodes image and scales it to reduce memory consumption 
    private static Bitmap decodeFile(File f){ 
     try { 
     //decode image size 
     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inSampleSize = 2; 
     o.inJustDecodeBounds = true; 
     BitmapFactory.decodeStream(new FileInputStream(f),null,o); 

     //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); 
    } catch (FileNotFoundException e) {} 
    return null; 
} 
+0

이 코드를 게시하시기 바랍니다 사용하여 비트 맵의 ​​크기를 줄일 필요가있다. –

답변

1

당신은 메모리가 부족합니다, 당신은 정확하게 당신이 뭔가 잘못하고 어디 우리가 분석 할 수 있도록

BitmapFactory.Options option = new BitmapFactory.Options(); 
    option.inSampleSize = 2; 


Bitmap bm = BitmapFactory.decodeFile(root.getPath() + "/" + imageName, 
          option); 
        imageView.setImageBitmap(bm); 
0

도와주세요이 코드를 사용하고 메모리 문제의 부족에 직면하고있다 (웹 서비스를?) 아마 당신은 메시지 교환의 일부로 아닌 이미지를 전달해야합니다 (여기서 base64가 인코딩되고 다시 복사되어 귀중한 힙을 복사해야 함). 그러나 서버에서 이진 스트림을 가져 오는 별도의 요청으로?

0

당신은 OutOfMemoryError에 기인 한 RuntimeException을 얻고 있습니다. OutOfMemoryError는 대개 Android에서 응용 프로그램에 할당 한 공간에 비해 너무 큰 이미지를로드하려고 할 때 발생합니다. 당신이 호출 방법과 함께 다음과 같은 행 위하고 아래의 코드 중 일부를 게시하고 앱에서 무슨 일을하는지 설명 할 수 있다면

, 우리는 아마 더 나은 당신을 도울 수 :

ImageLoader.java:142 
ImageLoader.java:78 
DetailPhotoHandler.java:211 
DetailPhotoHandler.java:153 
관련 문제