2016-08-29 6 views
0

Fragment 클래스의 마커를 사용하여 Google지도에서 현재 위치를 표시하고 싶습니다. 지도는 이미 표시되어 있지만 MapFragment을 초기화하면 NullpointerException이 표시됩니다.Google지도에서 현재 위치의 마커 표시

MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
mapFragment.getMapAsync(this); 

이것은 onMapReady() 기능입니다 :

@Override 
public void onMapReady(GoogleMap googleMap) { 

    this.googlemap_global = googleMap; 
    googlemap_global.setMyLocationEnabled(true); 
    googlemap_global.setTrafficEnabled(true); 
    googlemap_global.setIndoorEnabled(true); 
    googlemap_global.setBuildingsEnabled(true); 
    googlemap_global.getUiSettings().setZoomControlsEnabled(true); 

} 

는 그리고이 레이아웃 파일입니다 : 여기

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal" 
tools:context=".GPSTracker2" > 


<fragment 
    android:id="@+id/map" 
    android:layout_width="match_parent" 
    android:layout_height="400dp" 
    class="com.google.android.gms.maps.MapFragment" /> 

<Button 
    android:id="@+id/gps_service_start_stop_button" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="GPS Service starten"/> 

나는이 초기화와 함께 그것을 시도 나는 마커를 설정합니다 돕는

java.lang.NullPointerException: Attempt to invoke virtual method 

'android.app.Fragment android.app.FragmentManager.findFragmentById(int)' on a null object reference 
at com.gpstracker.viktor.gpstracker2.Home_Fragment.<init>(Home_Fragment.java:82) 
at com.gpstracker.viktor.gpstracker2.GPSTracker2.selectItemFromDrawer(GPSTracker2.java:105) 
at com.gpstracker.viktor.gpstracker2.GPSTracker2.access$000(GPSTracker2.java:28) 
at com.gpstracker.viktor.gpstracker2.GPSTracker2$1.onItemClick(GPSTracker2.java:67) 
at android.widget.AdapterView.performItemClick(AdapterView.java:310) 
at android.widget.AbsListView.performItemClick(AbsListView.java:1145) 
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3066) 
at android.widget.AbsListView$3.run(AbsListView.java:3903) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5461) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

감사 :

여기
LatLng latlng = new LatLng(latitude_global,longitude_global); 

    if(googlemap_global != null){ 
     Marker aktueller_standort = googlemap_global.addMarker(new MarkerOptions().position(latlng).title("Standort")); 

     googlemap_global.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, 15)); 

     // Zoom in, animating the camera. 
     googlemap_global.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null); 
    } 

는 로그 캣 출력입니다.

SupportMapFragment branchdetails_map = 
       (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
+0

당신은 당신의 XML 파일을 표시 할 수 있습니다 – Soham

답변

2

요 아래

<fragment 
    android:id="@+id/map" 
    android:layout_width="match_parent" 
    android:layout_height="400dp" 
    class="com.google.android.gms.maps.MapFragment" /> 

<fragment 
    android:id="@+id/map" 
    android:layout_width="match_parent" 
    android:layout_height="400dp" 
     class="com.google.android.gms.maps.SupportMapFragment" /> 

MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map); 

같은

1

변경이 UR XML 파일지도에

<FrameLayout 
     android:id="@+id/mapContainer" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

자바 파일의 코드

FrameLayout mapContainer = (FrameLayout) findViewById(R.id.mapContainer); 
//show map of 40% of screen 
DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm); 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
      ViewGroup.LayoutParams.MATCH_PARENT); 
    params.height = (int) ((float) dm.heightPixels * (float) 0.5); 
    mapContainer.setLayoutParams(params); 
    FragmentManager fm = getFragmentManager(); 
    MapFragment mapFragment = MapFragment.newInstance(); 
    fm.beginTransaction().replace(R.id.mapContainer, mapFragment).commit(); 

mapFragment.getMapAsync(new OnMapReadyCallback() { 
       @Override 
       public void onMapReady(GoogleMap googleMap) { 
        GoogleMap mMap = googleMap; 
        mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
        addMarks(mMap); 

표시 마커

private void addMarks(GoogleMap googleMap) { 
    LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
    LatLng latLng = new LatLng(lat1, long1); 
    builder.include(latLng); 
    MarkerOptions markerOptions = new MarkerOptions(); 
    markerOptions.position(latLng); 
    markerOptions.title(currentLocation); 
    googleMap.addMarker(markerOptions); 

    } 
관련 문제