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?

  • Android: Compartir mapa de bits no guardado en SD
  • Android: Cambiar el tamaño de un archivo de mapa de bits grande a un archivo de salida escalado
  • Android: ¿Diferencia entre canvas.drawBitmap y BitmapDrawable.draw?
  • Eliminar la imagen de una vista de imagen Android
  • Convertir texto de cadena en mapa de bits
  • ¿Es necesario llamar a Bitmap.recycle () después de usarlo (en Android)?
  • MediaStore.Images.Media.getBitmap y fuera de error de memoria
  • Carga Android de mapas de bits grandes
  • 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.