0

我想在按钮上添加一个 onClicklistener;所以当我按下它时,它会为用户位置设置动画。但是,如果没有用户位置并且按下按钮,它会由于用户位置 = null 而崩溃。如何使它仅在不等于 null 时运行?

我试过了 -

private void myLocationButton() {
    MapView mp = (MapView) findViewById(R.id.mapView);
    final MapController mapController = mp.getController();
    final Button myLocationButton = (Button) findViewById(R.id.myLocationButton);
    myLocationButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (myLocationButton.isClickable()) {
                mapController.animateTo(myLocationOverlay.getMyLocation());
                mapController.setZoom(17);

            }

        }
    });

}

这是一个很长的帖子,感谢您的充足时间。

4

2 回答 2

1

你做的几乎是对的。但是你必须得到一个新的Location对象,因为它必须!= null在你按下按钮的那一刻。我也怀疑您是否需要isClickable()检查,因为您刚刚被点击。

myLocationButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Location userLocation = myLocationOverlay.getMyLocation();
        if (myLocationButton.isClickable() && userLocation != null) {
            mapController.animateTo(userLocation);
            mapController.setZoom(17);
        }
    }
});

我在userLocation这里使用变量是因为

if (myLocationOverlay.getMyLocation() != null) {
    mapController.animateTo(myLocationOverlay.getMyLocation());
}

仍然可以抛出 a NullPointerException,因为您在第二次调用时获得了新结果,getMyLocation并且可能会null再次出现。我应该是安全的,因为一旦它有了一个真实的位置,它getMyLocation可能永远不会变回。null

于 2012-04-19T17:30:15.143 回答
0

试试这个:

@Override
        public void onClick(View v) {
            if (myLocationButton.isClickable() && myLocationOverlay.getMyLocation() != null) {
                mapController.animateTo(myLocationOverlay.getMyLocation());
                mapController.setZoom(17);

            }

        }
    });
于 2012-04-19T17:30:07.523 回答