gpt4 book ai didi

java - 内部 JSON 对象的 GWT Java 覆盖

转载 作者:行者123 更新时间:2023-11-28 20:39:21 26 4
gpt4 key购买 nike

我有一个关于为 JSON 对象创建 GWT Java 覆盖的问题。

"flightTracks": [
{
"flightId": 287679776,
"carrierFsCode": "AA",
"flightNumber": "100",
"departureAirportFsCode": "JFK",
"arrivalAirportFsCode": "LHR",
"departureDate": {
"dateLocal": "2013-02-05T18:15:00.000",
"dateUtc": "2013-02-05T23:15:00.000Z"
},
"equipment": "777",
"bearing": 51.350983507381706,
"positions": [],
"waypoints": [
{
"lon": -73.76667022705078,
"lat": 40.63333511352539
},
.....many different waypoints here.........
{
"lon": -73.76667022705078,
"lat": 40.61666488647461
},
],

我被告知内部字段“waypoints”是一个数组,可以通过以下方式访问它。

public final native double getWaypointsLatitude() /*-{
return this.waypoints[0].lat;
}-*/;

用这个方法,我只得到位置 0 处的 double 值。但我需要数组中包含的所有位置。

我也尝试过这个:

public static final native double[] getLongitude() /*-{

var longitudes = new Array();

{
for (i = 0; i < this.waypoints.length; i++) {
longitudes[i] = this.waypoints[i];
}
}

return longitudes;
}-*/;

稍后,我想从我的 GWT Java 代码访问此方法,执行如下操作:

for(int i = 0; i< entry.getLongitude().length; i++ ){
hp.add(new Label(""+ entry.getLongitude(i)));

}

但这根本不起作用(我也尝试了不同的方法,但都不起作用。)

有人可以告诉我如何使用 Java GWT 代码中的循环从内部数组“waypoints”访问经度/纬度吗?

非常感谢您的回答!

最佳答案

首先,您的代码不起作用的原因是 JavaScript 数组在 Java 领域中表示为 JavaScriptObject(当通过 JSNI 边界传递时),更具体地说,可以将其转换为JsArray 或在您的情况下为 JsArrayNumber

也就是说,您最好在 Java 中映射与 JavaScript 中完全相同的结构,并使用 Cooperatives 对象:

public class Coordinates extends JavaScriptObject {
protected Coordinates() { }

public final native double getLatitude() /*-{ return this.latitude; }-*/;
public final native double getLongitude() /*-{ return this.longitude; }-*/;
}

FlightTrack 对象中:

public final native JsArray<Coordinates> getWaypoints() /*-{ return this.waypoints; }-*/;

然后您可以循环遍历航点并提取它们的经度:

JsArray<Coordinate> waypoints = entry.getWaypoints();
for (int i = 0, l = waypoints.length(); i < l; i++) {
hp.add(new Label("" + waypoints.get(i).getLongitude());
}
<小时/>

注意:您的 for 循环未优化:getLongitude() 会构造一个数组只是为了读取其长度,您可以在每次迭代;而不是仅仅使用 getLongitudeCount():

public native final int getLongitudeCount() /*-{ return this.waypoints.length; }-*/;
public native final double getLongitude(int i) /*-{ return this.waypoints[i].longitude; }-*/;

我不认为以这种方式扁平化 API 有任何优势(实际上恰恰相反),所以我宁愿使用更多 JavaScriptObject 子类来紧密映射 Java 中的结构(如建议的那样)上)。

关于java - 内部 JSON 对象的 GWT Java 覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14708724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com