【问题标题】:NumberFormatException in Location.DistanceBetween resultLocation.DistanceBetween 结果中的 NumberFormatException
【发布时间】:2015-09-01 01:54:34
【问题描述】:

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

// 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)

错误日志显示 Invalid double 但 Location.distanceBetween 的结果是浮点数。有没有人可以帮我解决这个问题?非常感谢。

【问题讨论】:

  • 如果 (mCheckDistances[0] / 1000) 已经是一个浮点数并且你在 String.format("%.2f", ...) 中使用它你会得到一些奇怪的东西,比如 "10.5.2f "
  • 尝试使用 float 而不是 double

标签: android gps location distance


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    如果要将任何字符串转换为双精度,该字符串应仅包含数字和“。”没有别的。

    【讨论】:

      【解决方案3】:

      这看起来像是格式化字符串时的本地化问题。看看这个帖子:DecimalFormat and Double.valueOf()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-19
        • 1970-01-01
        • 2017-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多