2017-01-31 3 views
-1

Ich habe einen Web-Service geschrieben, der byte array zurückgibt.java.lang.OutOfMemoryError Android-SOAP-Antwort-Byte-Array

Wenn ich den Dienst von einem Android-Anwendung aufrufen, gibt es mir aus Speicherfehler auf der Linie:

androidHttpTransport.call(SOAP_ACTION + WebMethodName, envelope); 

Auf einigen mobilen Geräten es funktioniert, aber auf einigen mobilen Geräten (wahrscheinlich die Geräte mit niedrigem RAM), wird der Speicherfehler aufgehoben.

Bitte vorschlagen.

Update # 2 @Rohit - Hier ist mein Code

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

Ich versuchte largeHeap = "true" bekam aber gleichen Fehler. Auch ich habe gelesen, dass es nicht ratsam ist, largeHeap = "true" zu verwenden. Danke für Ihre Antwort.

+0

Bitte geben Sie den Code hinzufügen, um die genaue issuse zu überprüfen. – Rohit

+0

@Rohit - Ich habe Code in meiner Frage hinzugefügt. Bitte überprüfen und zurück. – Vito

Antwort

0

Versuchen

<application android:largeHeap="true"> 

in Ihrem Manifest

Verwandte Themen