5

SupportMapFragment를 연장하는 Fragment가 있습니다.참조 MapView in SupportMapFragment

public class PlaceMapsFragment extends SupportMapFragment { 
    private GoogleMap mMap; 
    private LatLng mPosFija; 

    public PlaceMapsFragment() { 
     super(); 
    } 

    public static PlaceMapsFragment newInstance(LatLng posicion) { 
     PlaceMapsFragment frag = new PlaceMapsFragment(); 
     frag.mPosFija = posicion; 
     return frag; 
    } 

    @Override 
    public GoogleMap getMap() { 
     // TODO Auto-generated method stub 
     return super.getMap(); 
    } 

    @Override 
    public void onCreate(Bundle arg0) { 
     // TODO Auto-generated method stub 
     super.onCreate(arg0); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = super.onCreateView(inflater, container, savedInstanceState); 
     //initMap(); 
     return view; 
    } 

    private void initMap() { 
     UiSettings settings = getMap().getUiSettings(); 
     settings.setAllGesturesEnabled(false); 
     settings.setMyLocationButtonEnabled(false); 

     getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(mPosFija, 16)); 
     getMap().addMarker(
       new MarkerOptions().position(mPosFija) 
         .icon(BitmapDescriptorFactory 
           .fromResource(R.drawable.marker))); 
    } 

} 

이제 맵에 내 기능을 추가 할 수 있도록 자동으로 생성 된 MapView를 참조하고 싶습니다. 내가 initMap();하려고하면

내가 얻을 NullPointerException

오류 :

12-10 02:54:20.171: E/AndroidRuntime(4339): FATAL EXCEPTION: main 
12-10 02:54:20.171: E/AndroidRuntime(4339): java.lang.NullPointerException 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at maps.ar.b.a(Unknown Source) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at maps.y.h.a(Unknown Source) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at maps.y.au.a(Unknown Source) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at maps.y.ae.moveCamera(Unknown Source) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at com.google.android.gms.maps.internal.IGoogleMapDelegate$Stub.onTransact(IGoogleMapDelegate.java:83) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.os.Binder.transact(Binder.java:297) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a.moveCamera(Unknown Source) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at com.google.android.gms.maps.GoogleMap.moveCamera(Unknown Source) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at com.m7.nomad.PlaceMapsFragment.initMap(PlaceMapsFragment.java:55) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at com.m7.nomad.PlaceMapsFragment.onCreateView(PlaceMapsFragment.java:46) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at com.m7.nomad.PlaceActivity$TabManager.onTabChanged(PlaceActivity.java:153) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.widget.TabHost.invokeOnTabChangeListener(TabHost.java:379) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.widget.TabHost.setCurrentTab(TabHost.java:364) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:150) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:540) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.view.View.performClick(View.java:3591) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.view.View$PerformClick.run(View.java:14263) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.os.Handler.handleCallback(Handler.java:605) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.os.Handler.dispatchMessage(Handler.java:92) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.os.Looper.loop(Looper.java:137) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at android.app.ActivityThread.main(ActivityThread.java:4507) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
12-10 02:54:20.171: E/AndroidRuntime(4339):  at dalvik.system.NativeStart.main(Native Method) 
+0

logcat을 게시하시기 바랍니다. – nhaarman

+0

@Niek가 추가했습니다. –

+0

이 오류를 해결했습니까? 나는 같은 문제가있다 : S –

답변

8

이 예상 behabiour입니다.

조각이 onCreateView()을 통과 한 후에 만 ​​getMap()으로 전화 할 수 있습니다. 그렇지 않으면 null이됩니다. Google Play 서비스를 사용할 수없는 경우 null을받을 수도 있습니다.

즉, initMap()onResume()으로 호출하십시오.

here을 확인할 수 있습니다.

희망이 있습니다.

+1

여전히 같은 오류가 발생하고있다. –

6

마지막으로 해결했습니다. getMap()을 무시해야하며, mMap 변수가 필요하지 않습니다. GoogleMap이 클래스에 포함되어 있습니다. 마지막으로 당신은 onResume에 initMap()를 호출해야합니다

public class PlaceMapsFragment extends SupportMapFragment { 
    private LatLng mPosFija = new LatLng(37.878901,-4.779396); 

    public PlaceMapsFragment() { 
     super(); 
    } 

    public static PlaceMapsFragment newInstance(LatLng posicion) { 
     PlaceMapsFragment frag = new PlaceMapsFragment(); 
     frag.mPosFija = posicion; 
     return frag; 
    } 

    @Override 
    public void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    initMap(); 
    } 



    @Override 
    public void onCreate(Bundle arg0) { 
     // TODO Auto-generated method stub 
     super.onCreate(arg0); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = super.onCreateView(inflater, container, savedInstanceState); 
     //initMap(); 
     return view; 
    } 

    private void initMap() { 
     UiSettings settings = getMap().getUiSettings(); 
     settings.setAllGesturesEnabled(false); 
     settings.setMyLocationButtonEnabled(false); 

     getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(mPosFija, 16)); 
     getMap().addMarker(
       new MarkerOptions().position(mPosFija) 
         .icon(BitmapDescriptorFactory 
           .fromResource(R.drawable.marker))); 
    } 

} 

그것 (: D 나 같은) 구글지도 API의 v2와 함께 시작하는 다른 사람을 도움이되기를 바랍니다.

0

문제는 onCreateView에 있습니다. super.onCreateView()를 호출하는 것을 잊었습니다. 확인 this