我正在开发Android应用程序,但我认为这可能是特定于Java的。
从片段中我称之为静态方法。在片段中,我为静态方法设置了所有参数。当我调试应用程序时,参数都已设置,但是当我进入静态方法时,参数未设置。
这是片段中的方法(它发生在GPSTracker.distanceInMetersFromTo
的调用中):
public void updateDistance(Location location) {
latitude = location.getLatitude();
longtitude = location.getLongitude();
List<ListInspectieItem> newList = new ArrayList<ListInspectieItem>();
List<ListInspectieItem> oldList = adapter.getValues();
for (ListInspectieItem l : oldList) {
double latitudeFrom = latitude;
double longtitudeFrom = longtitude;
double latitudeTo = Double.valueOf(l.latitude);
double longtitudeTo = Double.valueOf(l.longtitude);
double afst = GPSTracker.distanceInMetersFromTo(
latitudeFrom,
longtitudeFrom,
latitudeTo,
longtitudeTo
);
newList.add(new ListInspectieItem(
l.inspectieSoort,
l.opdrachtIdentificatie,
l.bronsysteem,
l.latitude,
l.longtitude,
round(afst, 2)
));
}
...
adapter.changeList(newList);
}
这是静态方法:
public static double distanceInMetersFromTo(double latitudeFrom, double longtitudeFrom, double latitudeTo, double longtitudeTo){
double R = 6371e3; // metres
double phi1 = doubleToRadian(latitudeFrom);
double phi2 = doubleToRadian(latitudeTo);
double deltaphi = doubleToRadian(latitudeFrom-latitudeTo);
double deltadelta = doubleToRadian(longtitudeFrom-longtitudeTo);
double a = Math.sin(deltadelta/2) * Math.sin(deltaphi/2) +
Math.cos(phi1) * Math.cos(phi2) *
Math.sin(deltadelta/2) * Math.sin(deltadelta/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
return R * c;
}
参数latitudeFrom
和longtitudeFrom
都已设置,但latitudeTo
和longtitudeTo均未设置。
当我调用该方法时,所有变量都有一个值。我不知道我做错了什么,这可能是我不知道的一些Java魔法。
为了澄清这一点,这里有两个调试期间的截图:
这是静态方法distanceInMetersFromTo
,您可以看到只设置了latitudeFrom
和longtitudeFrom
。
答案 0 :(得分:1)
您是否尝试过使用parseDouble(l.latitude)
代替Double.valueOf(l.latitude)
?后者返回一个Double
对象,而前者返回一个原语double
,它是您为其分配的变量的数据类型。
Autounboxing应该已经处理好了,但值得一试。