5

Ich habe ein Fragment, das SupportMapFragment erweitert.Referenz 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))); 
    } 

} 

Jetzt möchte ich die MapView refernce die automatisch generiert wird, so dass ich meine Funktionen der Karte hinzufügen.

Wenn ich zu initMap(); versuche ich bekommen NullPointerException

Fehler:

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

Bitte senden Sie Ihre logcat – nhaarman

+0

@Niek haben es –

+0

hinzugefügt Haben Sie diesen Fehler zu lösen? Ich habe das gleiche Problem: S –

Antwort

8

Dies ist eine erwartete behabiour.

Sie können getMap() nur aufrufen, nachdem das Fragment onCreateView() durchlaufen hat, andernfalls erhalten Sie eine null. Sie können auch eine null erhalten, wenn die Google Play-Dienste nicht verfügbar sind.

Mit anderen Worten, rufen Sie initMap() in onResume().

Sie können mehr here überprüfen.

Hoffe es hilft!

+1

bekomme immer noch den gleichen Fehler. –

6

Ich habe es endlich gelöst, Sie müssen nicht überschreiben getMap() und Sie brauchen nicht die Variable mMap, die GoogleMap ist in der Klasse enthalten. Schließlich müssen Sie initMap() in onResume nennen:

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

} 

Hoffen, dass es andere Menschen hilft, die mit dem v2 von Google Maps API (wie mir: D) beginnen.

0

Das Problem ist in der onCreateView. Sie haben vergessen, super.onCreateView() aufzurufen. Überprüfen Sie this