2017-01-20 5 views
3

는 아래와 같이는 프로그래밍지도보기 만들기 및 조각에 널 포인터 예외에 마커 결과를 추가 내가 프로그래밍 방식으로지도보기를 만들고 MarkerPosition를 추가하려고

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

당신의 GoogleMap으로는 아직로드 널 (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

구글지도 이제 비동기로드해야이 메소드를 구현 한 후 작업한다. 그런 뭔가 작동합니다

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

그것은 구글에 11.8.0onCreatea()onResume()가 볼 필수 버전 서비스를 재생 밝혀지도보기 :

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