从方法中消失参数

时间:2017-08-18 08:47:48

标签: java android android-fragments

我正在开发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;
}

参数latitudeFromlongtitudeFrom都已设置,但latitudeTo和longtitudeTo均未设置。

当我调用该方法时,所有变量都有一个值。我不知道我做错了什么,这可能是我不知道的一些Java魔法。

更新

为了澄清这一点,这里有两个调试期间的截图:

从片段调用静态方法。你可以看到参数都已设置完毕。 Fragment screenshot

这是静态方法distanceInMetersFromTo,您可以看到只设置了latitudeFromlongtitudeFrom

static method screenshot

1 个答案:

答案 0 :(得分:1)

您是否尝试过使用parseDouble(l.latitude)代替Double.valueOf(l.latitude)?后者返回一个Double对象,而前者返回一个原语double,它是您为其分配的变量的数据类型。 Autounboxing应该已经处理好了,但值得一试。