1

以下方法只执行了一半:

public void onLocationChanged(Location newLocation) {
    double lat = newLocation.getLatitude();
    double lon = newLocation.getLongitude();
    boolean firstGoodFix = (waitingForLoc && newLocation.getAccuracy() < 30); // <= EXECUTION STOPS AFTER THIS LINE
    if (currentLocation == null || firstGoodFix) {
        LatLng myLocation = new LatLng(lat, lon);
        map.animateCamera(CameraUpdateFactory.newLatLng(myLocation));
    }
    currentLocation = newLocation;
    if (firstGoodFix) {
        sendMyLocation(newLocation);
        waitingForLoc = false;
    } else {
        sendMyLocation();
    }
}

当我单步执行代码时,它会正常执行到指定的行,然后跳转到右大括号,其余代码永远不会执行。

newLocation是有效的,waitingForLoc(真)也是如此。 newLocation.getAccuracy()应该是回程了1000currentLocation一片空白。 firstGoodFix没有出现在方法末尾的变量列表中,这使我相信该行没有完成。

这里发生了什么?

编辑

按照下面的建议,我稍微改变了方法的结构,发现无论我做什么,只要waitingForLoc读取 的值,方法就会停止执行。唯一可以让它工作的是完全删除变量。

我还尝试设置waitingForLoc= true 作为方法的第一行,以确保它有一个值,这没有区别。以前它被设置在onResume().

所以我现在的问题变成了:为什么读取这个变量会导致执行停止?中似乎没有任何相关输出LogCat

4

4 回答 4

0

你有一个方法。将组成 firstGoodFix 布尔值的部分拆分为单独的布尔值,然后重新操作到 firstGoodFix 以查看该方法是否返回不可能小于(或大于或等于)30(如 NAN 或一个错误,上帝知道:)

于 2013-07-24T05:15:54.647 回答
0

由于 newLocation.getAccuracy() 返回大约 1000 并且 waitingForLoc 是一个布尔变量,请尝试将您的代码更改为:

//Store value of function in a local variable
boolean getAccuracyValue = false;
if(newLocation.getAccuracy() < 30)
{
  getAccuracyValue=true;
}

//Now set the firstGoodFix

boolean firstGoodFix=(waitingForLoc && getAccuracyValue);

理想情况下,您的解决方案应该有效。但我假设问题出在功能上。我不知道为什么。

于 2013-07-24T05:26:41.197 回答
0

可能是因为

(waitingForLoc && newLocation.getAccuracy() < 30);

这会像(true && 1000 < 30)。我认为编译器首先尝试获取输出true && 1000。这就是该方法在中间停止执行的原因。试着把那条线改成(waitingForLoc && (newLocation.getAccuracy() < 30));这样。让我知道会发生什么。我希望这能帮到您。

于 2013-07-24T05:24:42.233 回答
-2

尝试在您的行中使用括号,如下所示:

boolean firstGoodFix = (waitingForLoc && (newLocation.getAccuracy() < 30) );

请注意比较中的额外括号。

PS:对于那些投票反对我的答案的人,你愿意评论并解释你为什么投票反对吗?我只是想提供帮助,而这样你只会阻止人们帮助别人......

于 2013-07-24T05:23:33.880 回答