我目前正尝试在android studio上开发一个跑步跟踪器,我使用一种普通的技术来获得距离,然后把它转换成英里而不是米,我是在一个服务中完成的。但是,当我启动模拟路由时,它开始喷射出随机长数。我知道这与如何使用distanceto()计算距离有关,但不知道如何解决它。没有公布完整的代码,但相关的部分是吹
@Override
public void onCreate() {
super.onCreate();
Log.d("G53", "onCreate called");
locationListener = new MyLocationListener();
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
try {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5, 5, locationListener);
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
oldLocation = location;
} catch (SecurityException e) {
Log.d("g53mdp", e.toString());
}
}
public double getDistance() {
if(running) {
distance = distance * 0.000621371192;
Log.d("tag", " " + distance);
return distance;
}
return 0;
}
public void startExercise() {
Log.d("tag", "startExercise called");
startTime = System.currentTimeMillis();
stopTime = 0;
running = true;
distance = 0;
}
public void stopExercise() {
Log.d("tag", "stopExercise called");
running = false;
startTime = 0;
}
public class MyLocationListener extends Binder implements LocationListener, IInterface {
@Override
public void onLocationChanged(Location location) {
if(running) {
distanceInMetres = oldLocation.distanceTo(location);
if (distanceInMetres < 10) {
Log.i("DISTANCE", "Values too close, so not used.");
} else {
distance += distanceInMetres;
oldLocation = location;
}
}
}
logcat中的输出如下所示
1条答案
按热度按时间2lpgd9681#
我有两个想法。
我读了你的代码,你把英里换算成米就行了。
1.-我认为问题是你在2个或多个方法中重新利用距离变量,造成溢出。
你在增加距离。
这是完美的,但是您读取该变量并在中为它们指定一个新值
所以我建议你改变
getDistance()
进入之内这样,就不会重新分配值。
2.-另一个可能的问题可能是并发问题,但您需要发布更多关于代码的信息。