5

J'ai un fragment qui étend SupportMapFragment.Référence MapView dans 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))); 
    } 

} 

Maintenant, je veux refernce le MapView qui est généré automatiquement afin que je puisse ajouter ma fonctionnalité à la carte.

Quand j'essaie de initMap(); i get NullPointerException

Erreur:

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

Publiez svp votre logcat – nhaarman

+0

@Niek l'a ajouté –

+0

Avez-vous résolu cette erreur? J'ai le même problème: S –

Répondre

8

Ceci est un behabiour attendu.

Vous pouvez appeler getMap() seulement après que le fragment a traversé onCreateView(), sinon il vous donnera un null. Vous pouvez également recevoir un null si les services Google Play ne sont pas disponibles. En d'autres termes, appelez initMap() dans onResume().

Vous pouvez vérifier plus here.

J'espère que ça aide!

+1

Je reçois toujours la même erreur. –

6

Je l'ai finalement résolu, vous ne devez pas surcharger getMap() et vous n'avez pas besoin de la variable mMap, le GoogleMap est inclus dans la classe. Enfin, vous devez appeler initMap() dans onResume:

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

} 

espère que cela aide d'autres personnes qui commencent avec la v2 de cartes google api (comme moi: D).

0

Le problème est dans onCreateView. Vous avez oublié d'appeler super.onCreateView(). Vérifier this