2017-01-20 1 views
3

をマーカーの結果を追加:プログラム私は、プログラムのMapViewを作成し、以下に示すようにMarkerPositionを追加しようとしているのMapViewを作成およびフラグメントでnullポインタ例外で

MapView mapView = new MapView(getActivity()); 
((ViewGroup) rootView).addView(mapView); 

GoogleMap googleMap = mapView.getMap(); 
googleMap.addMarker(new MarkerOptions() 
     .position(new LatLng(
       Double.parseDouble(
         mEvent.getEventInfo().mEventData.mLat), 
       Double.parseDouble(
         mEvent.getEventInfo().mEventData.mLng))) 
     .title("Marker")); 

マニフェストファイル:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 

<permission 
    android:name="com.example.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name="com.example.permission.MAPS_RECEIVE" /> 

私は、次のエラーを取得しています:

java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.model.Marker com.google.android.gms.maps.GoogleMap.addMarker(com.google.android.gms.maps.model.MarkerOptions)' on a null object reference 

答えて

3

をお使いのGoogleマップがまだロードされていないためには、nullを意味しますが、クラッシュの原因となっていることにマーカーを追加しています。より良いmapView.getMapAsync(context);ではなく、mapView.getMap();を使用して、ビューにMapFragmentを追加することにより、

@Override 
    public void onMapReady(final GoogleMap map) { 
     if(map != null){ 
     // you are ready to add marker here   
     } 
    } 
2

のGoogleマップは現在、非同期にロードする必要があり、このメソッドを実装し、それに動作します。そのようなことは動作します:

public class MainActivity extends Activity implements OnMapReadyCallback { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.map_activity); 


     MapView mapView = new MapView(this); 
     ((LinearLayout) findViewById(R.id.mapWrapper)).addView(mapView); 
     mapView.getMapAsync(this); 

    } 

    @Override 
    public void onMapReady(GoogleMap map) { 

     map.addMarker(new MarkerOptions() 
       .position(new LatLng(0, 0)) 
       .title("Marker")); 
    } 

} 

このレイアウトで

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mapWrapper" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

</LinearLayout> 
0

それはGoogleで11.8.0onCreatea()onResume()を見ることが必須とされているバージョンのサービスを果たしていることが判明したのMapView:

@Override public void setupMap(LatLng latLng) { 
    if (mapView == null) { 
     mapView = new MapView(getActivity()); 
     rootLayout.addView(mapView); 
     mapView.onCreate(Bundle.EMPTY); 
    } 
    mapView.getMapAsync(map -> { 
     map.clear(); 
     map.addCircle(MapUtil.makeDefaultGreenCircle(getActivity(), latLng)); 
    }); 
    } 

@Override public void onResume() { 
    super.onResume(); 
    mapView.onResume(); 
    } 
関連する問題