字节分配内存不足(使用soap将字符串作为字符串连接到webservice)

Uda*_*ran 11 android bytearray bitmap ksoap2

我有一个bitmap,所以我想上传一个webserivceas字符串,并想要检索字符串.

使用以下命令将位图转换为字符串am:

ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

strBase64 = Base64.encodeToString(byteArray, Base64.URL_SAFE);
Run Code Online (Sandbox Code Playgroud)

以上String内容用作soapobject上传的属性.

但是Out of memory on a 11674900-byte allocation在打印和上传时我会得到.

如果我调试了问题,没有打印我得到

com.sun.jdi.InvocationException occurred invoking method.
Run Code Online (Sandbox Code Playgroud)

soaprequest.

如何解决此问题以及upload image作为字符串的webservice?

Can*_*ner 9

您正在创建一个11MB的图像(3份bitmap,stream,strBase64).所以通过调用来减少内存使用量

bitmap.recycle();
Run Code Online (Sandbox Code Playgroud)

在这条线下面:

bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
Run Code Online (Sandbox Code Playgroud)

完成后关闭流(如下所示stream.toByteArray();):

stream.close();
stream = null;
Run Code Online (Sandbox Code Playgroud)

请记住,无法保证在这些调用后立即清除内存.处理这种情况的正确方法是按块传输大块文件.