Location.DistanceBetween结果中的NumberFormatException

时间:2015-09-01 01:54:35

标签: android gps location distance

我创建基于位置的应用程序。在应用程序中有一种获取用户位置的方法。一些用户在尝试获取用户位置时遇到应用程序崩溃。下面是我的获取用户位置方法。

// Method to get user position
public void getUserPosition(double latitude, double longitude){
    // Check distance between user position and default position
    Location.distanceBetween(latitude, longitude,
            mUtils.ARG_DEFAULT_LATITUDE, mUtils.ARG_DEFAULT_LONGITUDE, mCheckDistances);

    // If the distance is more than maximum distance, then use default position
    if (Double.valueOf(String.format("%.2f", (mCheckDistances[0] / 1000))) > mUtils.ARG_MAX_DISTANCE) {
        mCurrentLocation = new Location("");
        mCurrentLocation.setLatitude(mUtils.ARG_DEFAULT_LATITUDE);
        mCurrentLocation.setLongitude(mUtils.ARG_DEFAULT_LONGITUDE);
        mCurrentLatitude = mCurrentLocation.getLatitude();
        mCurrentLongitude = mCurrentLocation.getLongitude();

        if(mLocationResultStatus == Activity.RESULT_CANCELED){
            showSnackbar(getString(R.string.gps_not_enabled_alert));
        }else {
            showSnackbar(getString(R.string.distance_alert));
        }

    }else{
        mCurrentLatitude = latitude;
        mCurrentLongitude = longitude;
    }

    // Move camera to user position
    CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(
            new LatLng(mCurrentLatitude, mCurrentLongitude),
            mUtils.ARG_DEFAULT_MAP_ZOOM_LEVEL);
    mMap.animateCamera(cameraUpdate);

}

及以下是错误日志,

java.lang.NumberFormatException: Invalid double: "12550,25"
at java.lang.StringToReal.invalidReal(StringToReal.java:63)
at java.lang.StringToReal.initialParse(StringToReal.java:164)
at java.lang.StringToReal.parseDouble(StringToReal.java:282)
at java.lang.Double.parseDouble(Double.java:301)
at java.lang.Double.valueOf(Double.java:338)
at com.pongodev.locazee.activities.ActivityHome.getUserPosition(ActivityHome.java:675)
at com.pongodev.locazee.activities.ActivityHome.onLocationChanged(ActivityHome.java:1031)
at com.google.android.gms.location.internal.zzi$zzb.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6837)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

错误日志表示无效的double,但Location.distanceBetween的结果是float。有人可以帮我解决这个问题吗?非常感谢。

3 个答案:

答案 0 :(得分:0)

您可以通过执行(double) floatName将浮动转换为double,但这会导致舍入错误,因此不要期望精度。

答案 1 :(得分:0)

实际错误与您的值:12550,25 值应该是12550.25而不是12550,25。

如果要将任何字符串转换为double,则该字符串应仅包含数字和"。"不是别的。

答案 2 :(得分:0)

格式化字符串时,这看起来像是一个本地化问题。看一下这篇文章:DecimalFormat and Double.valueOf()