gpt4 book ai didi

java - 使用android studio获取两点之间的旅行时间的问题

转载 作者:行者123 更新时间:2023-12-01 09:12:51 27 4
gpt4 key购买 nike

上周,我一直在使用 Android Studio 编写代码来实现以下目标:

  1. 等待用户位于距起始航路点一定距离内
  2. 到达起始航路点后,启动计时器记录 GPS 数据和当前时间
  3. 越过终点航点时停止计时器

目前,我已经对开始和结束路点进行了硬编码,但我似乎遇到了一个错误,我一直试图使用 IDE 上的单步执行功能进行跟踪,但似乎找不到它。以下是我一直使用的代码:

void StartTimer (View view){
//Location l = null;
boolean hasLoc = false; //are we at the start?
float speed = 0;
float topSpeed = 0;


while(hasLoc == false && cancel == false){
float d = l.distanceTo(t);

if(d < 2.0)
hasLoc = true;

//if(!l.equals(lm.getLastKnownLocation("")))
String msg = "Latitude: " + l.getLatitude() + "\nLongitude: "+ l.getLongitude();
Toast.makeText(getBaseContext(), msg, Toast.LENGTH_LONG).show();
}

hasLoc = false;

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
// Actions to do after 10 seconds
buzzer();
}
}, 10000);

while(l.distanceTo(tf) > 2.0 && cancel == false){
float cSpeed = l.getSpeed();

if(cSpeed>topSpeed)
topSpeed = cSpeed;

String msg = "Current Speed: "+cSpeed+"Top Speed: "+topSpeed;
Toast.makeText(getBaseContext(), msg, Toast.LENGTH_LONG).show();
}

cancel = false;
}

当我运行代码时,我测试的手机会运行它,但它不会响应,这让我相信存在一个我没有考虑到的不满意循环。

任何建议都会有帮助,提前感谢您的建议!

最佳答案

您的 while 循环阻塞了 CPU 的执行,这导致它无法响应。相反,您应该将代码放在线程中并调用 Thread.sleep(1000);在线程内部,这样 while 循环在每次执行其中的代码后都会暂停 1 秒。

类似这样的事情:

  new Thread(new Runnable() {
@Override
public void run() {

while (hasLoc == false && cancel == false) {
float d = l.distanceTo(t);
if (d < 2.0)
hasLoc = true;
String msg = "Latitude: " + l.getLatitude() + "\nLongitude: " + l.getLongitude();

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getBaseContext(), msg, Toast.LENGTH_LONG).show();
}
});
}

hasLoc = false;

new Handler().postDelayed(new Runnable() {
public void run() {
// Actions to do after 10 seconds
buzzer();
}
}, 10000);

while (l.distanceTo(tf) > 2.0 && cancel == false) {
float cSpeed = l.getSpeed();

if (cSpeed > topSpeed)
topSpeed = cSpeed;

String msg = "Current Speed: " + cSpeed + "Top Speed: " + topSpeed;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getBaseContext(), msg, Toast.LENGTH_LONG).show();
}
});
}

cancel = false;

}
}).start();

关于java - 使用android studio获取两点之间的旅行时间的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40807208/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com