2017-01-31 8 views
-1

Я написал веб-сервис, который возвращает byte array.java.lang.OutOfMemoryError Android SOAP Response Byte Array

Когда я вызываю службу из андроид приложения, это дает мне из памяти ошибки на линии:

androidHttpTransport.call(SOAP_ACTION + WebMethodName, envelope); 

На некоторых мобильных устройствах это работает, но на некоторых мобильных устройствах (вероятно устройств имея низкую ОЗУ), он выдает ошибку памяти.

Просьба предложить.

Update # 2 @Rohit - Вот мой код

public static void DownloadFile(String WebMethodName, String ServiceURL) 
{ 
byte[] imgBytes=null; 
SoapObject request = new SoapObject(NAMESPACE, WebMethodName); 

PropertyInfo NameProperty = new PropertyInfo(); 
NameProperty.setName("Name"); 
NameProperty.setValue("TEST"); 
NameProperty.setType(String.class); 
request.addProperty(NameProperty); 

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
envelope.setOutputSoapObject(request); 

HttpTransportSE androidHttpTransport = new HttpTransportSE(ServiceURL,100000); 

try { 
    //On below line I get OOM error 

    androidHttpTransport.call(SOAP_ACTION + WebMethodName, envelope); 
    final SoapPrimitive primitive = (SoapPrimitive) envelope.getResponse(); 
    if (primitive == null) 
    { 
     imgBytes=null; 
    } 
    else 
    { 
     final String imgData = primitive.toString(); 

     if (imgData != "") 
     { 
      imgBytes = Base64.decode(imgData, Base64.DEFAULT); 
      String s = new String(imgBytes); 

      String filePath = android.os.Environment.getExternalStorageDirectory() +"/TestDirectory/Test.apk" ; 

      File file = new File(filePath); 
      file.getParentFile().mkdirs(); 
      file.createNewFile(); 

      BufferedOutputStream objectOut = new BufferedOutputStream(new FileOutputStream(file)); 
      objectOut.write(imgBytes); 
      objectOut.close(); 
      } 

     } 
     else 
     { 
      Log.w("ImgData", "Image data is null"); 
     } 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
    Log.w("ImgData", "Error :" + e.getMessage()); 
} 

} 

Update # 3

@parik dhakan

Я попытался largeHeap = "истинный", но получил ту же ошибку. Также я прочитал, что не рекомендуется использовать largeHeap = "true". Спасибо за ваш ответ.

+0

Введите код для проверки точного issuse. – Rohit

+0

@Rohit - Я добавил код в свой вопрос. Проверьте и верните. – Vito

ответ

0

Попробуйте добавить

<application android:largeHeap="true"> 

в манифесте