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?

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!

  • Sqlite Database - ¿Cómo guardar la imagen tomada de la intención de la cámara, así como hashmap a sqlite para recuperar más tarde?
  • Android tratando de redondear las esquinas de mapa de bits
  • Android: Cómo utilizar grantUriPermission para poder crear y enviar un correo electrónico con un archivo adjunto de mapa de bits
  • Android: Bitmap a Byte Array y espalda: SkImageDecoder :: Factory devuelto null
  • ¿Hay lejos para conseguir uri del mapa de bits con hacia fuera excepto él a sdcard?
  • GetDrawingCache () devuelve null
  • Cómo puedo convertir un mapa de bits en formato PDF en android
  • Bitmaps en Android
  • ¿Es posible utilizar el método BitmapFactory.decodeFile para decodificar una imagen desde la ubicación http?
  • OutofMemoryError: el tamaño de mapa de bits supera el presupuesto de VM (Android)
  • Android: ¿Cómo configurar la imagen de ImageSwitcher mediante un mapa de bits? SetImageBitmap no existe?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.