5

SupportMapFragment öğesini genişleten bir Parçam var.Başvuru MapView 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))); 
    } 

} 

Şimdi ben haritaya benim işlevler ekleyebilirsiniz böylece otomatik olarak oluşturulan MapView refernce istiyorum. i initMap(); çalıştığınızda

i almak NullPointerException

Hata:

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

Lütfen Logcat dosyanızı gönderin – nhaarman

+0

@Niek bunu ekledi –

+0

Bu hatayı çözdünüz mü? Aynı problem var: S –

cevap

8

Bu beklenen bir behabiour olduğunu.

Yalnızca Parçalar onCreateView()'dan geçtikten sonra getMap() numaralı telefonu arayabilir, aksi takdirde size bir null verecektir. Google Play Hizmetleri mevcut değilse null da alabilirsiniz. Başka bir deyişle, onResume() numaralı telefondan initMap() numaralı telefonu arayın.

Daha fazla here'u kontrol edebilirsiniz.

Umut eder!

+1

Hala aynı hatayı alıyorum. –

6

Nihayet çözdüm, getMap()'u geçersiz kılmanız gerekmiyor ve mMap değişkenine ihtiyacınız yok, GoogleMap sınıfta yer alıyor. Son olarak onResume içinde initMap() aramak gerekir:

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

} 

o (: D benim gibi) Google Maps API ait v2 ile başlayan diğer insanlara yardımcı olur.

0

Sorun onCreateView'tedir. Super.onCreateView() öğesini çağırmayı unuttunuz. this

İlgili konular