I am converting one of my apps to use wait for / ResumableSub.
And I came across an interesting problem where I had routines returning a return
This is not the code but this is an easy way of showing:
The above generates this output and error
Now I understand the problem
that I am not declaring the return type. And there are two fixes for this either I can change the RC as Boolean to RC as ResumableSub or
for each return I can do a wait for(x...) complete(RC as Boolean) and then return RC
I just found it surprising that returning a boolean that resumablesub could not propergate the return type backwards
BobVal
And I came across an interesting problem where I had routines returning a return
This is not the code but this is an easy way of showing:
B4X:
Sub Activity_Resume
CallSubDelayed(Me, "TestResumableSub")
End Sub
Public Sub TestResumableSub
Log("TestResumableSub")
Wait for (TestResumable2Sub) Complete(RC As Boolean)
End Sub
public Sub TestResumable2Sub As ResumableSub
Log("TestResumableSub2")
Return TestResumableSub3
End Sub
public Sub TestResumableSub3 As ResumableSub
Log("TestResumableSub3")
Return TestResumableSub4
End Sub
public Sub TestResumableSub4 As ResumableSub
Log("TestResumableSub4")
Sleep(0)
Return True
End Sub
The above generates this output and error
B4X:
** Activity (main) Pause, UserClosed = false **
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
TestResumableSub
TestResumableSub2
TestResumableSub3
TestResumableSub4
main$ResumableSub_TestResumableSubresume (java line: 443)
java.lang.ClassCastException: anywheresoftware.b4a.keywords.Common$ResumableSubWrapper cannot be cast to java.lang.Boolean
at b4a.example.main$ResumableSub_TestResumableSub.resume(main.java:443)
at anywheresoftware.b4a.BA.checkAndRunWaitForEvent(BA.java:250)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:190)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:176)
at anywheresoftware.b4a.keywords.Common$14.run(Common.java:1761)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6939)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
** Activity (main) Pause, UserClosed = false **
Now I understand the problem
Wait for (TestResumable2Sub) Complete(RC As Boolean)
for each return I can do a wait for(x...) complete(RC as Boolean) and then return RC
I just found it surprising that returning a boolean that resumablesub could not propergate the return type backwards
BobVal