Android Question java.lang.OutOfMemoryError into JSONGenerator

ebalvis

Member
Licensed User
Longtime User
I want to send a photo to a REST server

Code
Code: Copy
Sub sendPhoto(filename As String,claveSolicitud As Int,claveFoto As Int)
Dim lstData As List
Dim data As JSONGenerator
Dim out As OutputStream
    lstData.Initialize
      out.InitializeToBytesArray(100) 'size not really important
      File.Copy2(File.OpenInput(filename, ""), out)
    lstData.Initialize2(out.ToBytesArray)
    data.Initialize2(lstData)
    RESTcomm.ExecuteRPCRequestJson("PhotoServicio",Me,Array As String(claveSolicitud,claveFoto),data.ToString)
End Sub

In a Samsung SIII works perfectly but with any team lower, eg Samsung SII gives the following error
in line data.ToString
Code: Copy
java.lang.OutOfMemoryError


    at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94)
    at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:145)
    at java.lang.StringBuilder.append(StringBuilder.java:216)
    at anywheresoftware.b4a.AbsObjectWrapper.toString(AbsObjectWrapper.java:111)
    at java.lang.String.valueOf(String.java:1681)
    at anywheresoftware.b4a.debug.Debug.objectToString(Debug.java:376)
    at anywheresoftware.b4a.debug.Debug.writeLocals(Debug.java:312)
    at anywheresoftware.b4a.debug.Debug.sendBPData(Debug.java:275)
    at anywheresoftware.b4a.debug.Debug.access$9(Debug.java:271)
    at anywheresoftware.b4a.debug.Debug$1.run(Debug.java:248)
    at android.os.Handler.handleCallback(Handler.java:605)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at anywheresoftware.b4a.Msgbox.waitForMessage(Msgbox.java:211)
    at anywheresoftware.b4a.Msgbox.debugWait(Msgbox.java:156)
    at anywheresoftware.b4a.debug.Debug.wait(Debug.java:205)
    at anywheresoftware.b4a.debug.Debug.reachBP(Debug.java:252)
    at anywheresoftware.b4a.debug.Debug.ShouldStop(Debug.java:224)
    at inn.grcplanta.main._sendphoto(main.java:1281)
    at inn.grcplanta.main._checknewphoto(main.java:506)
    at inn.grcplanta.main._rdp_onchangestate(main.java:1226)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:169)
    at anywheresoftware.b4a.keywords.Common$4.run(Common.java:930)
    at android.os.Handler.handleCallback(Handler.java:605)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:4624)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
    at dalvik.system.NativeStart.main(Native Method)
 
The server REST is implemented in Delphi XE3 only supports requests to methods using JSON objects.
What it could do is convert the image to Base64 string before sending.
 
Upvote 0
Try to run your app in Release mode. The error message you get is related to the debugger.
Sorry for the delay in answering, but I needed another phone other than the SIII.
This is the error resulting in release mode
Code: Copy
threadid=1: thread exiting with uncaught exception (group=0x40018578)
main_sendphoto (B4A line: 126)
data.Initialize2(lstData)
java.lang.OutOfMemoryError
    at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95)
    at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:153)
    at java.lang.StringBuilder.append(StringBuilder.java:217)
    at anywheresoftware.b4a.AbsObjectWrapper.toString(AbsObjectWrapper.java:111)
    at java.lang.String.valueOf(String.java:1860)
    at anywheresoftware.b4a.debug.Debug.objectToString(Debug.java:376)
    at anywheresoftware.b4a.debug.Debug.writeLocals(Debug.java:312)
    at anywheresoftware.b4a.debug.Debug.sendBPData(Debug.java:275)
    at anywheresoftware.b4a.debug.Debug.access$9(Debug.java:271)
    at anywheresoftware.b4a.debug.Debug$1.run(Debug.java:248)
    at android.os.Handler.handleCallback(Handler.java:587)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at anywheresoftware.b4a.Msgbox.waitForMessage(Msgbox.java:211)
    at anywheresoftware.b4a.Msgbox.debugWait(Msgbox.java:156)
    at anywheresoftware.b4a.debug.Debug.wait(Debug.java:205)
    at anywheresoftware.b4a.debug.Debug.reachBP(Debug.java:252)
    at anywheresoftware.b4a.debug.Debug.ShouldStop(Debug.java:224)
    at inn.grcplanta.main._sendphoto(main.java:1284)
    at inn.grcplanta.main._checknewphoto(main.java:509)
    at inn.grcplanta.main._rdp_onchangestate(main.java:1234)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:169)
    at anywheresoftware.b4a.keywords.Common$4.run(Common.java:930)
    at android.os.Handler.handleCallback(Handler.java:587)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3687)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
    at dalvik.system.NativeStart.main(Native Method)
    at dalvik.system.NativeStart.main(Native Method)
 
Upvote 0
java.lang.OutOfMemoryError

What size is the image? It needs to be downsampled (do a search here on OutOfMemoryError) and also look at increasing the heap size - which will help to a point.
 
Upvote 0
Back
Top