2012-06-12 161 views
0

我從webservice顯示圖像到listview假設我正在測試應用程序10次 然後6次這個異常來請任何人都幫助我。 我使用AsyncTask調用Web服務。這個例外是什麼意思?

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

你跑出來的內存,同時解碼位圖從一些流來(Web服務?) 也許你應該提供圖像而不是作爲消息交換的一部分(它將會是 base64編碼和複製一次又一次地污染你珍貴的堆),但作爲單獨的請求從服務器拉二進制流?

0

您正在收到由OutOfMemoryError引起的RuntimeException。 OutOfMemoryErrors通常在您嘗試將Android分配給您的應用程序的空間過大的圖像時發生。

如果你可以發佈以下行和一些上面和下面他們的代碼,以調用方法一起,並解釋你在你的應用程序在做什麼,我們或許可以幫助您更好地:

ImageLoader.java:142 
ImageLoader.java:78 
DetailPhotoHandler.java:211 
DetailPhotoHandler.java:153