java.lang.OutOfMemoryError Android SOAP响应字节数组

时间:2017-01-31 10:22:00

标签: android arrays out-of-memory

我写了一个返回byte array的网络服务。

当我从Android应用程序调用该服务时,它会在行上显示内存不足错误

androidHttpTransport.call(SOAP_ACTION + WebMethodName, envelope);

在某些移动设备上它可以工作,但在某些移动设备上(可能是内存较低的设备),它会抛出内存不足错误。

请建议。

更新#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());
}

}   

更新#3

@parik dhakan

我试过largeHeap =“true”但是得到了同样的错误。另外我读过不建议使用largeHeap =“true”。 谢谢你的回复。

1 个答案:

答案 0 :(得分:0)

尝试添加

<application android:largeHeap="true">
你的清单中的