Thanks a lot Alexandre!, It worked like a charm! Jésica. On Wed, Sep 7, 2011 at 11:31 AM, Alexandre Ardhuin < [email protected]> wrote:
> Hi, > > You should use Overlays (see > http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsOverlay.html > ) > > In your case : > > public class Location extends JavaScriptObject { > public static final native Location create(double latitude, double > longitude) /*-{ return $wnd.Microsoft.Maps.Location(latitude, longitude); > }-*/; > > // Typically, methods on overlay types are JSNI > public final native String getLatitude() /*-{ return this.latitude; }-*/; > public final native void setLatitude(String latitude) /*-{ this.latitude > = latitude; }-*/; > } > > // push them in an JsArray > Location timbuktu = Location.create(lat1, lng1); > Location kabara = Location.create(lat2, lng2); > JsArray<Location> locations = JsArray.createArray().cast(); > locations.push(timbuktu); > locations.push(kabara); > > // and with JSNI > public native void addPolyline(JsArray<Location> locations)/*-{ > var line = new $wnd.Microsoft.Maps.Polyline(locations); > var firstLocation = locations[0]; > > map.setView( {zoom:8, center:firstLocation}); > map.entities.push(line); > }-*/; > > > Alexandre. > > > > 2011/9/7 Jésica <[email protected]> > >> Thanks for your help Alexandre, I would like to add more context to >> the issue I'm facing: >> >> I have a domain object called Location, with the following structure: >> >> public class Location{ >> >> Double latitude; >> Double longitude; >> (...) >> } >> >> >> ********************************************************************************************** >> >> public class Test implements EntryPoint { >> >> MapWrapper map = MapWrapper.getMapWrapper(); >> map.getMap(); >> >> Collection<Location> locations = new ArrayList<Location>(); >> locations.add(timbuktu); >> locations.add(kabara); >> >> //Routes section - Polyline >> JsArrayString locationsJS = JsArrayString.createArray().cast(); >> >> for (Location location : locations) { >> locationsJS.push("{latitude:"+ location.getLatitude() +", >> longitude:"+location.getLongitude()+"}"); >> } >> >> map.addPolyline(locationsJS); >> >> } >> >> >> ********************************************************************************************** >> >> And this is what addPolyline does: >> >> public native void addPolyline(JsArrayString locations)/*-{ >> var locationsArray = new Array(); >> >> for (var i=0; i<locations.length; i++) { >> var parsedJSON = eval('('+locations[i]+')'); >> var latitude=parsedJSON.latitude; >> var longitude=parsedJSON.longitude; >> var locationMS = new $wnd.Microsoft.Maps.Location(latitude, >> longitude); >> locationsArray[i] = locationMS; >> } >> >> var line = new $wnd.Microsoft.Maps.Polyline(locationsArray); >> var firstLocation = locationsArray[0]; >> map.setView( {zoom:8, center:firstLocation}); >> map.entities.push(line); >> }-*/; >> >> >> ********************************************************************************************** >> >> I would like to know if there is a better way for handling the array >> of Java objects. The thing here is that I wouldn't be working with >> single objects like numbers or strings, but with a custom Java object. >> Do I need to build a wrapper for doing It? -something like >> JsLocationArray-, and add in there the possibility of pushing a >> Location instead of the JSON structure I'm using? >> >> Jésica. >> >> On Sep 7, 5:13 am, Alexandre Ardhuin <[email protected]> >> wrote: >> > Hi, >> > >> > As said inhttp:// >> code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI..., >> > Java arrays appear to javascript as "opaque value that can only be >> passed >> > back into Java code". >> > You have to use JsArray, JsArrayBoolean, JsArrayInteger, JsArrayNumber >> or >> > JsArrayString to pass javascript arrays. >> > >> > Alexandre. >> > >> > 2011/9/6 Jésica <[email protected]> >> > >> > > Hi, I'm having a JS exception saying "null" when running the following >> > > code: >> > >> > > //Java Code >> > > bingMap.addPolyline(locationsArray); >> > >> > > //JSNI Code >> > > public native void addPolyline(Location[] locations)/*-{ >> > > for (var i = 0; i < locations.length; i++){ >> > > alert(locations[i]); >> > > } >> > > }-*/ >> > >> > > Is an extra processing required when managing arrays passed by >> > > parameter to a native method? >> > > Thanks in advance! >> > >> > > -- >> > > You received this message because you are subscribed to the Google >> Groups >> > > "Google Web Toolkit" group. >> > > To post to this group, send email to >> [email protected]. >> > > To unsubscribe from this group, send email to >> > > [email protected]. >> > > For more options, visit this group at >> > >http://groups.google.com/group/google-web-toolkit?hl=en. >> > >> > >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Google Web Toolkit" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]. >> For more options, visit this group at >> http://groups.google.com/group/google-web-toolkit?hl=en. >> >> > -- > You received this message because you are subscribed to the Google Groups > "Google Web Toolkit" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/google-web-toolkit?hl=en. > -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
