2017-05-27 7 views
1

を使用しているときにコールバックを使用するとエラーが発生します。getMap()は推奨されていません。エラーがスローされないようにこのコードを更新する方法に関するアイデア?あなたは一度だけgetMapAsync()を呼び出す必要があり、マップの準備ができたときに、onMapReady()コールバックはあなたにGoogleマップの参照を与えるマップgetMapAsync()が機能しない

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: Attempt to invoke virtual method 'void com.google.android.gms.maps.GoogleMap.animateCamera(com.goog‌​le.android.gms.maps.‌​CameraUpdate, com.google.android.gms.maps.GoogleMap$CancelableCallback)' on a null object reference


public class ZooMapFragment extends SupportMapFragment implements OnMapReadyCallback { 

public static ZooMapFragment getInstance(){ 
    ZooMapFragment fragment = new ZooMapFragment(); 

    return fragment; 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    CameraPosition position = CameraPosition.builder() 
      .target(new LatLng(39.7494, -104.9498)) 
      .zoom(16f) 
      .bearing(0.0f) 
      .tilt(0.0f) 
      .build(); 

    getMapAsync().animateCamera(CameraUpdateFactory.newCameraPosition(position), null); 
    getMapAsync().setMapType(GoogleMap.MAP_TYPE_HYBRID); 
    getMapAsync().setTrafficEnabled(true); 

    getMapAsync().getUiSettings().setZoomControlsEnabled(true); 

    MarkerOptions options = new MarkerOptions().position(new LatLng(39.7500, -104.9500)); 
    options.title("Zoo"); 
    options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)); 
    getMapAsync().addMarker(options); 

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

    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()); 
      } 
     } 

     @Override 
     public void failure(RetrofitError error) { 

     } 
    }); 
} 


@Override 
public void onMapReady(GoogleMap googleMap) { 
    // Add a marker in Denver, Zoo 
    // and move the map's camera to the same location. 
    LatLng denverZoo = new LatLng(39.7500, -104.9500); 
    googleMap.addMarker(new MarkerOptions().position(denverZoo) 
      .title("Marker in Denver Zoo")); 
    googleMap.moveCamera(CameraUpdateFactory.newLatLng(denverZoo)); 

} 
} 
+0

エラーは何ですか? logcat出力を投稿してください – Nabin

+1

'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.android.gms.maps.CameraUpdate、com.google.android.gms.maps.GoogleMap $)を呼び出そうとしていますCancelableCallback) 'ヌルオブジェクトリファレンスで' –

答えて

1

上のピンの位置を特定するためにAPIに引っ張ります。その後、必要に応じてGoogleマップを操作できます。

また、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)); 
    } 
} 
+0

これは素晴らしい動作しました。ありがとうございました! –

関連する問題