Android getMapAsync()不起作用

Android getMapAsync()不起作用,android,google-maps,nullpointerexception,Android,Google Maps,Nullpointerexception,使用getmapsync()时,使用回调时出错,因为getMap()已被弃用。有没有关于如何更新此代码以避免抛出错误的想法?拉入API以在地图上定位销 05-26 22:50:13.419 12576-12576/com.example.kdotz.zoo E/AndroidRuntime:致命异常:主进程:com.example.kdotz.zoo,PID:12576 java.lang.NullPointerException:尝试调用虚拟方法'void com.google.android

使用
getmapsync()
时,使用回调时出错,因为
getMap()
已被弃用。有没有关于如何更新此代码以避免抛出错误的想法?拉入
API
以在地图上定位销


05-26 22:50:13.419 12576-12576/com.example.kdotz.zoo E/AndroidRuntime:致命异常:主进程:com.example.kdotz.zoo,PID:12576 java.lang.NullPointerException:尝试调用虚拟方法'void com.google.android.gms.maps.GoogleMap.animateCamera(com.google‌​leandroid.gms.maps。‌​CameraUpdate,com.google.android.gms.maps.GoogleMap$CancelableCallback)在空对象引用上


公共类ZooMapFragment扩展了SupportMapFragment在MapreadyCallback上的实现{
公共静态ZooMapFragment getInstance(){
ZooMapFragment fragment=新的ZooMapFragment();
返回片段;
}
@凌驾
已创建视图上的公共void(视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
CameraPosition位置=CameraPosition.builder()
.目标(新的LatLng(39.7494,-104.9498))
.zoom(16f)
.轴承(0.0f)
.倾斜(0.0f)
.build();
getMapAsync().animateCamera(CameraUpdateFactory.newCameraPosition(position),null);
getMapAsync().setMapType(GoogleMap.MAP\u TYPE\u HYBRID);
getMapAsync().setTrafficEnabled(true);
getMapAsync().getUiSettings().setZoomControlsEnabled(true);
MarkerOptions选项=新MarkerOptions().位置(新车床(39.7500,-104.9500));
期权名称(“动物园”);
图标(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
getMapAsync().addMarker(选项);
getMapAsync().setOnMarkerClickListener(新的GoogleMap.OnMarkerClickListener()){
@凌驾
公共布尔onMarkerClick(标记){
marker.showInfoWindow();
返回true;
}
});
RestAdapter adapter=new RestAdapter.Builder()
.setEndpoint(getString(R.string.pins_feed))
.build();
PinsApiInterface PinsApiInterface=适配器.create(PinsApiInterface.class);
pinsApiInterface.getStreams(新回调(){
@凌驾
公共作废成功(列出PIN、响应){
用于(管脚:管脚){
Log.e(“Zoo”,pin.getName());
}
}
@凌驾
公共无效失败(错误){
}
});
}
@凌驾
4月1日公开作废(谷歌地图谷歌地图){
//在丹佛动物园加一个标记
//并将地图的摄影机移动到同一位置。
LatLng denverZoo=新LatLng(39.7500,-104.9500);
googleMap.addMarker(新标记选项().position(denverZoo)
.title(“丹佛动物园的标记”);
谷歌地图。移动摄像机(CameraUpdateFactory。newLatLng(denverZoo));
}
}

您应该只调用一次
getMapAsync()
,当映射准备好时,
onMapReady()
回调将为您提供GoogleMap引用。然后你可以根据需要操纵谷歌地图

还请注意,由于ZooMapFragment扩展了SupportMapFragment,因此不需要使用
onViewCreated()
,只需使用
onResume()
覆盖即可

public class ZooMapFragment extends SupportMapFragment 
        implements OnMapReadyCallback {

    private GoogleMap mMap;

    public ZooMapFragment() {
    }

    @Override
    public void onResume() {
        super.onResume();

        setUpMapIfNeeded();

        //Other stuff:
        RestAdapter adapter = new RestAdapter.Builder()
          .setEndpoint(getString(R.string.pins_feed))
          .build();

        PinsApiInterface pinsApiInterface = adapter.create(PinsApiInterface.class);

        pinsApiInterface.getStreams(new Callback<List<Pin>>() {
            @Override
            public void success(List<Pin> pins, Response response) {
                for(Pin pin: pins){
                    Log.e("Zoo", pin.getName());
                }
            }
    }

    private void setUpMapIfNeeded() {
        if (mMap == null) {
            getMapAsync(this);
        }
    }

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

        mMap.setMyLocationEnabled(true);
        mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        mMap.getUiSettings().setMapToolbarEnabled(false);


        mMap.setOnMarkerClickListener( new GoogleMap.OnMarkerClickListener() {
          @Override
          public boolean onMarkerClick(Marker marker) {
            marker.showInfoWindow();
            return true;
          }
        });

         // Add a marker in Denver, Zoo
        // and move the map's camera to the same location.
        LatLng denverZoo = new LatLng(39.7500, -104.9500);
        mMap.addMarker(new MarkerOptions().position(denverZoo)
                .title("Marker in Denver Zoo"));
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(denverZoo, 15));
    }
}
公共类ZooMapFragment扩展了SupportMapFragment
在MapreadyCallback上实现{
私有谷歌地图;
公共ZooMapFragment(){
}
@凌驾
恢复时公开作废(){
super.onResume();
setupmapifneed();
//其他材料:
RestAdapter adapter=new RestAdapter.Builder()
.setEndpoint(getString(R.string.pins_feed))
.build();
PinsApiInterface PinsApiInterface=适配器.create(PinsApiInterface.class);
pinsApiInterface.getStreams(新回调(){
@凌驾
公共作废成功(列出PIN、响应){
用于(管脚:管脚){
Log.e(“Zoo”,pin.getName());
}
}
}
私有void setUpMapIfNeeded(){
如果(mMap==null){
getMapAsync(这个);
}
}
@凌驾
4月1日公开作废(谷歌地图谷歌地图){
mMap=谷歌地图;
mMap.setMyLocationEnabled(真);
mMap.setMapType(GoogleMap.MAP\u TYPE\u HYBRID);
mMap.getUiSettings().setMapToolbarEnabled(false);
setOnMarkerClickListener(新的GoogleMap.OnMarkerClickListener(){
@凌驾
公共布尔onMarkerClick(标记){
marker.showInfoWindow();
返回true;
}
});
//在丹佛动物园加一个标记
//并将地图的摄影机移动到同一位置。
LatLng denverZoo=新LatLng(39.7500,-104.9500);
mMap.addMarker(新标记选项().position(denverZoo)
.title(“丹佛动物园的标记”);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(denverZoo,15));
}
}

错误是什么?请发布logcat输出
05-26 22:50:13.419 12576-12576/com.example.kdotz.zoo E/AndroidRuntime:FATAL EXCEPTION:main Process:com.example.kdotz.zoo,PID:12576 java.lang。NullPointerException:尝试对空对象引用调用虚拟方法“void com.google.android.gms.maps.GoogleMap.animateCamera(com.google.android.gms.maps.CameraUpdate,com.google.android.gms.maps.GoogleMap$CancelableCallback)”
public class ZooMapFragment extends SupportMapFragment 
        implements OnMapReadyCallback {

    private GoogleMap mMap;

    public ZooMapFragment() {
    }

    @Override
    public void onResume() {
        super.onResume();

        setUpMapIfNeeded();

        //Other stuff:
        RestAdapter adapter = new RestAdapter.Builder()
          .setEndpoint(getString(R.string.pins_feed))
          .build();

        PinsApiInterface pinsApiInterface = adapter.create(PinsApiInterface.class);

        pinsApiInterface.getStreams(new Callback<List<Pin>>() {
            @Override
            public void success(List<Pin> pins, Response response) {
                for(Pin pin: pins){
                    Log.e("Zoo", pin.getName());
                }
            }
    }

    private void setUpMapIfNeeded() {
        if (mMap == null) {
            getMapAsync(this);
        }
    }

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

        mMap.setMyLocationEnabled(true);
        mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        mMap.getUiSettings().setMapToolbarEnabled(false);


        mMap.setOnMarkerClickListener( new GoogleMap.OnMarkerClickListener() {
          @Override
          public boolean onMarkerClick(Marker marker) {
            marker.showInfoWindow();
            return true;
          }
        });

         // Add a marker in Denver, Zoo
        // and move the map's camera to the same location.
        LatLng denverZoo = new LatLng(39.7500, -104.9500);
        mMap.addMarker(new MarkerOptions().position(denverZoo)
                .title("Marker in Denver Zoo"));
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(denverZoo, 15));
    }
}