The best examples right now are in the GoogleMaps cn1lib
https://github.com/codenameone/codenameone-google-maps/blob/master/GoogleMaps/src/com/codename1/googlemaps/MapContainer.java

There are also samples in the unit tests:
https://github.com/codenameone/CodenameOne/blob/master/tests/core/test/com/codename1/ui/JavascriptTests.java

The unit tests all use the executeAndWait() wrappers for convenience, but
these carry the baggage of invokeAndBlock - to make it synchronous.  Best
for performance to try to use async versions whenever possible.

1) call from Javascritp to java and receive a response from java


First add your callback:
bc.addJSCallback("window.app.mycb=function(arg){callback.onSuccess(arg)}",
arg->{
     // Log.p("The result was "+arg.getInt());
});

Then on the javascript side, you can call "window.app.mycb(1+2)", and your
java callback will be called.

2) call from java to javascript and receive a response from javascript


Async style:

bc.execute("callback.onSuccess(1+2)", res->{
     Log.p("The result was "+res.getInt());
});

Sync Style:

int result = bc.executeAndWait("callback.onSuccess(1+2)").getInt();


If you need to pass parameters to your javascript code, there are variants
that do that and handle escaping strings properly.

e.g.

bc.execute("callback.onSuccess(${0}+${1})", new Object[]{1, 2}, res->{
    Log.p("The result was "+res.getInt());  // Should be 3
});

If you need to call methods on a Javascript object, you can also create a
java "Proxy" object to make this a bit easier.  E.g.

JSProxy window = bc.createJSProxy("window");
int height = window.getAndWait("innerHeight").getInt();


Steve

On Thu, Jan 4, 2018 at 6:12 AM, <[email protected]> wrote:

> Hi Steve
>
> where can I found documentation or examples to addJSCallback?
>
> I can be able to:
>
> call from javascritp to java
>
> browserComponent.addJSCallback(
> "window.app = {isActive: function() {callback.onSuccess()}}",
> value -> {
> call from java to javacript and send parameters
>
> browserComponent.execute("controlPopUp ('"+ relojReservaValueString +"',
> "+ reservationState +","+ vehicleLockState +")");
>
>
> Now I need,
>
> 1) call from Javascritp to java and receive a response from java
>
> 2) call from java to javascript and receive a response from javascritp
>
>
> Can you help me ?
>
> Best Regards Kandy
>
> On Wednesday, January 3, 2018 at 8:05:56 PM UTC+1, [email protected]
> wrote:
>>
>> Hi Steve:
>>
>>    Indeed, upon further inspection you're so right! We've just detected a
>> problem with our SVN workflow in which we keep updating the "libVersion"
>> property on codenameone.properties between dev machines WITHOUT updating
>> the libs at the same time, so we were keeping old libs and preventing the
>> proper update procedure.
>>
>>    We now see the deprecated warnings and the new code in
>> BrowserComponent. Will work from here.
>>
>> Kind regards,
>>     Miguelanxo.
>>
>> On Wednesday, January 3, 2018 at 7:09:50 PM UTC+1, Steve Hannah wrote:
>>>
>>> I just confirmed with a fresh project.  The changes are there.  I'm not
>>> sure why you're not picking them up.  Is your project using the libs at the
>>> default location (lib/CodenameOne.jar and JavaSE.jar) or have you adjusted
>>> the classpath for the project.
>>>
>>> Steve
>>>
>>> On Wed, Jan 3, 2018 at 10:02 AM, <[email protected]> wrote:
>>>
>>>> Hi Steve
>>>>
>>>> I already did the project libs update, but didn't help. My library date
>>>> is 30/12/2017, when I do the update it says "Your proyect Libs are up to
>>>> date", we are blocked on the development of our App to IOS.
>>>>
>>>> Please help us.
>>>>
>>>> Best Regards
>>>> Kandy
>>>>
>>>> On Wednesday, January 3, 2018 at 5:44:23 PM UTC+1, Steve Hannah wrote:
>>>>
>>>>>
>>>>> On Wed, Jan 3, 2018 at 8:35 AM, <[email protected]> wrote:
>>>>>
>>>>>> Hello:
>>>>>>
>>>>>>     How can we use that new interface? There's no documentation and
>>>>>> our current lib doesn't expose said addJSCallback() yet (and updating c1
>>>>>> libs didn't help).
>>>>>>
>>>>> You need to update your project libs.  It should be there (just tested
>>>>> on a project here).  (I.e. Project Properties > Update Project Libs .. not
>>>>> "update cn1libs")
>>>>>
>>>>>
>>>>>> Also, is the fix already available in the build servers?
>>>>>>
>>>>> No.  It will be up in the next build server update on Friday.
>>>>>
>>>>> Steve
>>>>>
>>>>>
>>>>>>
>>>>>> Kind regards,
>>>>>>     Kandy.
>>>>>>
>>>>>>
>>>>>> On Wednesday, January 3, 2018 at 2:47:04 PM UTC+1, Steve Hannah wrote:
>>>>>>>
>>>>>>> This looks like a race condition that has been there for a while.  I
>>>>>>> have just committed a fix for it here
>>>>>>> https://github.com/codenameone/CodenameOne/commit/783ac28284
>>>>>>> 09aa747103a35001b4886e24944484
>>>>>>>
>>>>>>> With the last update, however, the com.codename1.javascript package
>>>>>>> is now deprecated in favour of a new async API that is incorporated
>>>>>>> directly into the BrowserComponent class.  I recommend migrating over to
>>>>>>> this new API for new code, as it will produce much better performance 
>>>>>>> (no
>>>>>>> hidden invokeAndBlock under the hood - except in xxxAndWait() methods).
>>>>>>>
>>>>>>> Using the new API, your code would become:
>>>>>>>
>>>>>>> bc.addJSCallback("window.checkfoxClickedCallback ={setChecked:
>>>>>>> function(){ callback.onSuccess(null)}}", r->{
>>>>>>>     Log.p("->checkboxClickedCallback.setChecked()");
>>>>>>>     contexto.mostrarMensaje("checkboxClickedCallback.setChecked()");
>>>>>>> });
>>>>>>> bc.addJSCallback("window.okButtonClickedCallback = {showMap:
>>>>>>> function() { callback.onSuccess(null)}}", r->{
>>>>>>>      Log.p("->okButtonClickedCallback.showMap()");
>>>>>>>      contexto.mostrarMensaje("okButtonClickedCallback.showMap()");
>>>>>>> });
>>>>>>>
>>>>>>> Notice, with this new syntax, you reference the java callback
>>>>>>> explicitly in the javascript code via the "callback" variable, which, in
>>>>>>> Javascript, contains 2 methods: onSuccess(arg), and onError(message, 
>>>>>>> code).
>>>>>>>
>>>>>>> Steve
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Wed, Jan 3, 2018 at 5:09 AM, <[email protected]> wrote:
>>>>>>>
>>>>>>>> Hello:
>>>>>>>>
>>>>>>>>     Since the last codename1 libary update we've been having
>>>>>>>> problems with the BrowserComponent on iOS. We've narrowed down the 
>>>>>>>> problem
>>>>>>>> to the callback registration process (which gets executed on the
>>>>>>>> BrowserComponent onLoad callback). We register two functions, but only 
>>>>>>>> the
>>>>>>>> second one can be invoked from javascript. The first one gets 
>>>>>>>> registered ok
>>>>>>>> (we can see its code from the javascript side) but fails to execute on 
>>>>>>>> iOS
>>>>>>>> (in Android and the simulator works fine). We tried a lot of 
>>>>>>>> permutations,
>>>>>>>> and different argument lengths for both functions, but the only 
>>>>>>>> difference
>>>>>>>> we see is the registration order. If we switch the registration order, 
>>>>>>>> we
>>>>>>>> can only invoke the other one (whichever gets registered last).
>>>>>>>>
>>>>>>>> /*
>>>>>>>> * Registramos el callback JS de valor cambiado del checkbox "No
>>>>>>>> volver a mostrar este asistente".
>>>>>>>> */
>>>>>>>> JSObject checkboxClickedCallback = (JSObject)
>>>>>>>> javascriptContext.get("{}");
>>>>>>>> checkboxClickedCallback.set("setChecked", new JSFunction() {
>>>>>>>> public void apply(JSObject self, Object[] args) {
>>>>>>>> Log.p("->checkboxClickedCallback.setChecked()");
>>>>>>>> contexto.mostrarMensaje("checkboxClickedCallback.setChecked()");
>>>>>>>>
>>>>>>>> }
>>>>>>>> });
>>>>>>>> javascriptContext.set("window.checkboxClickedCallback",
>>>>>>>> checkboxClickedCallback);
>>>>>>>>
>>>>>>>> /*
>>>>>>>> * Registramos el callback JS de click en el botón "OK".
>>>>>>>> */
>>>>>>>> JSObject okButtonClickedCallback = (JSObject)
>>>>>>>> javascriptContext.get("{}");
>>>>>>>> okButtonClickedCallback.set("showMap", new JSFunction() {
>>>>>>>> public void apply(JSObject self, Object[] args) {
>>>>>>>> Log.p("->okButtonClickedCallback.showMap()");
>>>>>>>> contexto.mostrarMensaje("okButtonClickedCallback.showMap()");
>>>>>>>>
>>>>>>>> }
>>>>>>>> });
>>>>>>>> javascriptContext.set("window.okButtonClickedCallback",
>>>>>>>> okButtonClickedCallback);
>>>>>>>>
>>>>>>>>     Please help, as it's impacting our current production code.
>>>>>>>>
>>>>>>>> Kind regards,
>>>>>>>>      Kandy
>>>>>>>>
>>>>>>>> --
>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>> Groups "CodenameOne Discussions" group.
>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>> send an email to codenameone-discussions+unsubs
>>>>>>>> [email protected].
>>>>>>>> Visit this group at https://groups.google.com/grou
>>>>>>>> p/codenameone-discussions.
>>>>>>>> To view this discussion on the web visit
>>>>>>>> https://groups.google.com/d/msgid/codenameone-discussions/49
>>>>>>>> 3a9217-0a4a-44b5-aede-974096f652d4%40googlegroups.com
>>>>>>>> <https://groups.google.com/d/msgid/codenameone-discussions/493a9217-0a4a-44b5-aede-974096f652d4%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>> .
>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Steve Hannah
>>>>>>> Software Developer
>>>>>>> Codename One
>>>>>>> http://www.codenameone.com
>>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "CodenameOne Discussions" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to [email protected]
>>>>>> .
>>>>>> Visit this group at https://groups.google.com/grou
>>>>>> p/codenameone-discussions.
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msgid/codenameone-discussions/0a
>>>>>> a6820b-d038-4a3f-82ad-c45fb4c6d5e6%40googlegroups.com
>>>>>> <https://groups.google.com/d/msgid/codenameone-discussions/0aa6820b-d038-4a3f-82ad-c45fb4c6d5e6%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Steve Hannah
>>>>> Software Developer
>>>>> Codename One
>>>>> http://www.codenameone.com
>>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "CodenameOne Discussions" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> Visit this group at https://groups.google.com/grou
>>>> p/codenameone-discussions.
>>>> To view this discussion on the web visit https://groups.google.com/d/ms
>>>> gid/codenameone-discussions/f7466bae-c35d-4baf-a776-ecc9e13f
>>>> 65ea%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/codenameone-discussions/f7466bae-c35d-4baf-a776-ecc9e13f65ea%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>>
>>> --
>>> Steve Hannah
>>> Software Developer
>>> Codename One
>>> http://www.codenameone.com
>>>
>> --
> You received this message because you are subscribed to the Google Groups
> "CodenameOne Discussions" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> Visit this group at https://groups.google.com/
> group/codenameone-discussions.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/codenameone-discussions/014fa1a2-ef58-49ba-bf93-
> 546a95896146%40googlegroups.com
> <https://groups.google.com/d/msgid/codenameone-discussions/014fa1a2-ef58-49ba-bf93-546a95896146%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Steve Hannah
Software Developer
Codename One
http://www.codenameone.com

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/CAGOYrKUHy%2BEbrBRaNtJ%2BHTWyy-VNoydWDDWhoGeCvY%2BzwTmVQg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to