我创建基于位置的应用程序。在应用程序中有一种获取用户位置的方法。一些用户在尝试获取用户位置时遇到应用程序崩溃。下面是我的获取用户位置方法。
// 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。有人可以帮我解决这个问题吗?非常感谢。
答案 0 :(得分:0)
您可以通过执行(double) floatName
将浮动转换为double,但这会导致舍入错误,因此不要期望精度。
答案 1 :(得分:0)
实际错误与您的值:12550,25 值应该是12550.25而不是12550,25。
如果要将任何字符串转换为double,则该字符串应仅包含数字和"。"不是别的。
答案 2 :(得分:0)
格式化字符串时,这看起来像是一个本地化问题。看一下这篇文章:DecimalFormat and Double.valueOf()