【发布时间】:2015-05-04 10:28:41
【问题描述】:
我试图将纬度和经度坐标存储在ArrayList 中,以在第一次请求后计算两个点之间的 harversine 公式,但我只得到一个 paar,我得到了输出 latLondList size: 1 .也许代码包含一些泽西符号,但问题只涉及 java 部分。
storeData方法:
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response storeData(Data data) {
String macD = data.getMac();
int routeD = data.getRoute();
float latD = data.getLatitude();
float longD = data.getLongitude();
final ArrayList<LatLong> latLongList = new ArrayList<LatLong >();
latLongList.add(new LatLong(latD, longD));
System.out.println("latLondList size: "latLongList.size());
Database db = new Database();
db.insertData(macD, routeD, latD, longD);
return Response.status(201).build();
}
Data类:
@Provider
public class Data {
private String mac;
private int route;
private float latitude;
private float longitude;
// constructor with getter and setter
}
LatLong类:
public class LatLong {
float latitude;
float longitude;
// constructor with getter and setter
}
编辑:
private ArrayList<LatLong> latLongList = new ArrayList<>();
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response storeData(Data data) {
String macD = data.getMac();
int routeD = data.getRoute();
float latD = data.getLatitude();
float longD = data.getLongitude();
latLongList.add(new LatLong(latD, longD));
}
【问题讨论】:
-
您正在向列表中添加一个元素。您期望的第二个值是多少?
-
您在哪里向
latLongList添加第二个元素?问题是什么? -
您正在为列表的每次迭代创建一个新的 ArrayList 对象。我认为您对其他语言中的
static关键字和 java 中的final感到困惑。final并不意味着该对象只有一次实例。具体来说,每次调用该方法时,都会创建一个新列表,并将一个元素推送给它。您不会在两次调用之间保留数组。 -
每次添加新对时都会创建一个新的空列表。
-
你每次都在创建一个新的 ArrayList,所以之前的会丢失。