0

根据本教程,我有一个带有谷歌地图的应用程序。根据本教程,我还获得了用户的当前位置。

截至 09/15,两者都使用最新的 API。

谷歌地图位于视图中的片段内。我一直试图让地图从public void onMapReady(GoogleMap map)函数内加载用户的当前位置,只有失败的结果和大量的NullPointerExceptions。就像是...

@Override
public void onMapReady(GoogleMap map) {
    mMap = map;

    mMap.setMyLocationEnabled(true);

    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    mLoadLocation = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());

    if(mLastLocation != null){
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(mLoadLocation, 18.0f));
    }else{
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(37.422611, -122.0840577), 18.0f));
    }
}

mLastLocation总是返回 NULL。所以我把moveCamera电话移到了onConnected,如下

@Override
public void onConnected(Bundle bundle) {
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);

    if (mLastLocation != null) {
        mLoadLocation = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());

        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(mLoadLocation, 18.0f));
    } else {
        Toast.makeText(this, "No Location", Toast.LENGTH_LONG).show();
    }
}

就像我想要的那样,这很有魅力。但是地图视图会在调用时始终准备就绪吗?onConnected或者这是逐设备的事情?无论采用何种方法,我都想保留功能。

我已经尝试了所有我能找到的使用用户当前位置启动地图的 SO 方法,但它们都没有奏效。大量崩溃和 NULL 值。

提前致谢。

4

1 回答 1

0

GoogleMap 和 FusedLocation 都是不同的类,所以它们的方法不同,所以很难判断哪个方法会先被调用。最好尽早调用 FusedLocation 并初始化 mLastLocation 或应用一些默认值。然后在 onMapReady 方法中将相机移动到 mLastLocation 的当前位置或默认位置。

于 2015-09-15T04:13:04.547 回答