Hola a todos
He creado una BD SQLite con DBBrowser, para guardar varios campos (Nº de pale, cantidad, tipo, lote…) en el teléfono, hasta aquí todo bien;
Pero sería un puntazo guardar también una foto de la etiqueta de cada pale; Y manos a la obra, hago esto. (Pequeña modificación de CameraIntent de Erel).
Pero 1.
Las fotos las pasa al ImageView en horizontal.
2.
Sería ideal poder hacer zum, ya que me veo menos que un gato de escayola.
Después paso la foto a una variable string, para guardarla en la BD.
Y cuando intenta guardarla
El simpático del Logs me dice que una MIE… y esto.
detallesdescarga_botonguardar_click (java line: 482)
java.lang.OutOfMemoryError: Failed to allocate a 8372236 byte allocation with 3462688 free bytes and 3MB until OOM
at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
at java.iutputStreamWriter.flushBytes(OutputStreamWriter.java:170)
at java.iutputStreamWriter.convert(OutputStreamWriter.java:184)
at java.iutputStreamWriter.write(OutputStreamWriter.java:269)
at java.io.PrintWriter.doWrite(PrintWriter.java:623)
at java.io.PrintWriter.write(PrintWriter.java:601)
at java.io.PrintWriter.write(PrintWriter.java:579)
at java.io.PrintWriter.write(PrintWriter.java:660)
at java.io.PrintWriter.append(PrintWriter.java:722)
at java.io.PrintWriter.append(PrintWriter.java:691)
at java.io.PrintWriter.append(PrintWriter.java:31)
at java.lang.Throwable.printStackTrace(Throwable.java:315)
at java.lang.Throwable.printStackTrace(Throwable.java:300)
at anywheresoftware.b4a.BA.printException(BA.java:262)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:191)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:157)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:153)
at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:78)
at android.view.View.performClick(View.java:5698)
at android.widget.TextView.performClick(TextView.java:10846)
at android.view.View$PerformClick.run(View.java:22565)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7230)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Me pierdo (Que inútil soy).
He creado una BD SQLite con DBBrowser, para guardar varios campos (Nº de pale, cantidad, tipo, lote…) en el teléfono, hasta aquí todo bien;
Pero sería un puntazo guardar también una foto de la etiqueta de cada pale; Y manos a la obra, hago esto. (Pequeña modificación de CameraIntent de Erel).
B4X:
Sub Process_Globals
Private ion As Object
Private const Foto As String = "EnvasesFoto.jpg"
Private codifica As StringUtils
End Sub
Sub Globals
Private ImageView1 As ImageView
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("1")
If Main.CreaFoto Then
Main.CreaFoto = False
TakePicture
Else
ImageView1.Bitmap = Main.FotoExistente
End If
End Sub
Sub Button1_Click
TakePicture
End Sub
Sub TakePicture
Dim i As Intent
i.Initialize("android.media.action.IMAGE_CAPTURE", "")
Dim uri As Uri
File.Delete(Main.Ruta, Foto)
uri.Parse("file://" & File.Combine(Main.Ruta, Foto))
i.PutExtra("output", uri) 'La imagen se guardará en esta ruta
Try
StartActivityForResult(i)
Catch
ToastMessageShow("La cámara no está disponible.", True)
End Try
End Sub
'El resultado llega aquí
Sub ion_Event (MethodName As String, Args() As Object) As Object
If Args(0) = -1 Then
Try
Dim in As Intent = Args(1)
If File.Exists(Main.Ruta, Foto) Then
Main.FotoNueva = LoadBitmapSample(Main.Ruta, Foto, ImageView1.Width, ImageView1.Height)
ImageView1.Bitmap = Main.FotoNueva
Else If in.HasExtra("data") Then 'Tratar de obtener miniatura en su lugar
Dim jo As JavaObject = in
Main.FotoNueva = jo.RunMethodJO("getExtras", Null).RunMethod("get", Array("data"))
End If
Catch
Log(LastException)
End Try
End If
If Main.FotoNueva.IsInitialized Then ImageView1.Bitmap = Main.FotoNueva
'Convertir el archivo de imagen en un array de bytes
Dim InputStream1 As InputStream
InputStream1 = File.OpenInput(Main.Ruta, Foto)
Dim OutputStream1 As OutputStream
OutputStream1.InitializeToBytesArray(1000)
File.Copy2(InputStream1, OutputStream1)
Dim Buffer() As Byte
Buffer = OutputStream1.ToBytesArray
Main.CadenaFotoNueva = codifica.EncodeBase64(Buffer) ' Convierte la imagen a String (cadena de caracteres.
Main.CreaFoto = True
Return Null
End Sub
Sub StartActivityForResult(i As Intent)
Dim jo As JavaObject = GetBA
ion = jo.CreateEvent("anywheresoftware.b4a.IOnActivityResult", "ion", Null)
jo.RunMethod("startActivityForResult", Array As Object(ion, i))
End Sub
Sub GetBA As Object
Dim jo As JavaObject
Dim cls As String = Me
cls = cls.SubString("class ".Length)
jo.InitializeStatic(cls)
Return jo.GetField("processBA")
End Sub
Pero 1.
Las fotos las pasa al ImageView en horizontal.
2.
Sería ideal poder hacer zum, ya que me veo menos que un gato de escayola.
Después paso la foto a una variable string, para guardarla en la BD.
B4X:
Main.CadenaFotoNueva = codifica.EncodeBase64(Buffer) ' Convierte la imagen a String (cadena de caracteres.
Y cuando intenta guardarla
B4X:
Sub BotonGuardar_Click
Dim Resultado As Int
If Nuevo Then
Resultado = Msgbox2("¿Guardamos los detalles del nuevo Palet_Envase?", "Guardar", "Si","No","",Main.Imagen(3))
If Resultado = DialogResponse.POSITIVE Then
'Guarda los nuevos detalles de la descarga
MySQLDetallesDescarga.ExecNonQuery("INSERT INTO DetallesDescarga VALUES(?,'" & Descargas.MyCursorDescargas.GetString("BDClave_Descargas") & "','" & Clave_Producto & "','" & Edit12.Text & "','" & Edit13.Text & "','" & Edit14.text & "','" & Edit15.text & "','" & Edit13.Text & "',0,'" & Main.CadenaFotoNueva & "')" )
End If
Pnl02.Visible=False
If Pnl01.IsInitialized Then Pnl01.Visible=True
Rellena_Cursor
Else
Resultado = Msgbox2("¿Guardamos los cambios?", "Guardar", "Si","No","",Main.Imagen(3))
If Resultado = DialogResponse.POSITIVE Then
'Guarda los cambios de los detalles de la descarga
MySQLDetallesDescarga.ExecNonQuery("UPDATE DetallesDescarga SET BDClave_Producto = '" & Clave_Producto & "', BDNPalet_Envase = '" & Edit12.Text & "', BDCantidad = '" & Edit13.Text & "', BDLote = '" & Edit14.Text & "', BDObservaciones = '" & Edit15.Text & "', BDFoto = '" & Main.CadenaFotoNueva & "' WHERE BDClave_DetallesDescarga ='" & MyCursorDetallesDescarga.GetString("BDClave_DetallesDescarga") & "'")
End If
Pnl02.Visible=False
If Pnl01.IsInitialized Then Pnl01.Visible=True
Rellena_Cursor
End If
End Sub
El simpático del Logs me dice que una MIE… y esto.
detallesdescarga_botonguardar_click (java line: 482)
java.lang.OutOfMemoryError: Failed to allocate a 8372236 byte allocation with 3462688 free bytes and 3MB until OOM
at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
at java.iutputStreamWriter.flushBytes(OutputStreamWriter.java:170)
at java.iutputStreamWriter.convert(OutputStreamWriter.java:184)
at java.iutputStreamWriter.write(OutputStreamWriter.java:269)
at java.io.PrintWriter.doWrite(PrintWriter.java:623)
at java.io.PrintWriter.write(PrintWriter.java:601)
at java.io.PrintWriter.write(PrintWriter.java:579)
at java.io.PrintWriter.write(PrintWriter.java:660)
at java.io.PrintWriter.append(PrintWriter.java:722)
at java.io.PrintWriter.append(PrintWriter.java:691)
at java.io.PrintWriter.append(PrintWriter.java:31)
at java.lang.Throwable.printStackTrace(Throwable.java:315)
at java.lang.Throwable.printStackTrace(Throwable.java:300)
at anywheresoftware.b4a.BA.printException(BA.java:262)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:191)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:157)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:153)
at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:78)
at android.view.View.performClick(View.java:5698)
at android.widget.TextView.performClick(TextView.java:10846)
at android.view.View$PerformClick.run(View.java:22565)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7230)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Me pierdo (Que inútil soy).