Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Fuera de memoria en una asignación de bytes (Bitmap como String al servicio web con jabón)

Estoy teniendo un bitmap , así que quiero subir una cadena de webserivceas y quiero recuperar la cadena.

Para convertir bitmap a string am usando:

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

Esto arriba String está usando como propiedad to en soapobject para cargar.

Pero me estoy quedando sin Out of memory on a 11674900-byte allocation , mientras que la impresión y la carga.

Y si depuré el problema, sin imprimir estoy recibiendo

 com.sun.jdi.InvocationException occurred invoking method. 

En soaprequest.

¿Cómo resolver este problema y upload image en webservice como cadena?

3 Solutions collect form web for “Fuera de memoria en una asignación de bytes (Bitmap como String al servicio web con jabón)”

Estás creando 3 copias de una imagen de 11MB ( bitmap , stream , strBase64 ). Así que reduzca el uso de la memoria llamando

 bitmap.recycle(); 

Debajo de esta línea:

 bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 

También cierra la secuencia cuando termines con ella (debajo de stream.toByteArray(); ):

 stream.close(); stream = null; 

Recuerde que no hay garantía de que la memoria se limpie inmediatamente después de estas llamadas . Manera apropiada de manejar este tipo de situación es transferir los pedazos grandes del archivo por el pedazo.

Una asignación de 11 millones de bytes mucho más grande que el montón de la mayoría de los teléfonos puede manejar. Usted definitivamente no quiere tener una matriz de bytes de ese tamaño en la memoria.

Intente usar el tamaño de insample con

BitmapFactory.decodeStream (InputStream es, Rect outPadding, BitmapFactory.Options opts)

Y las opciones de configuración para utilizar el tamaño de insample para devolver una imagen de tamaño razonable.

Una solución sencilla para algunos podría ser añadir android: configChanges = "orientation | screenSize" a su manifiesto. En mi caso, el emulador de Nexus_S se estaba estrellando sin esta línea, mientras que el dispositivo real de Nexus 7 en el que estaba probando no se estaba estrellando en la rotación.

Añadir esto parece ser una solución fácil para las aplicaciones que tienen un par de mapas de bits "match_parent" grandes para rotar y cambiar el tamaño.

¡Cuidado si está construyendo API antes de las 13!

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.