1

我試圖在我的應用程序中實施Google地圖。我使用的是抽屜式導航和打電話給我的片段是這樣的:谷歌地圖在導航抽屜 - 空指針異常,這是正確的片段?

//Main-Class 
public void onNavigationDrawerItemSelected(int position) { 

    Fragment myFramgent = null; 
    switch (position) { 
     ... 
     case 2 : 
      myFramgent = new Fillilaen(); 
      System.out.println("FILLIAEN"); 
      break; 
     ... 
     } 
    FragmentManager fragmentManager = getSupportFragmentManager(); 

    fragmentManager.beginTransaction() 
      .replace(R.id.container, myFramgent) 
      .commit(); 
    } 

的Fillialaen類

public class Fillilaen extends SupportMapFragment implements ... { 

    private GoogleMap mMap; 

     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     myView = inflater.inflate(R.layout.fillialen2, container, false); 
     return myView; 
     } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     SupportMapFragment fragment = (SupportMapFragment) this.getChildFragmentManager().findFragmentById(R.id.location_map); 
     fragment.getMapAsync(this); //ERROR COMES HERE 
     } 

     public void onMapReady(GoogleMap googleMap) { 
     //never enter this.. 
     mMap = googleMap; 
     Marker hamburg = mMap.addMarker(new MarkerOptions().position(HAMBURG).title("Hamburg")); 
     } 
    } 

我的XML

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

我得到一個NullPointerException,我絕對不知道爲什麼。我搜索了很多,發現類似的問題,但沒有任何幫助。

的空指針異常的開始:

致命異常:主 工藝:roth.com.test6,PID:13097 顯示java.lang.NullPointerException:嘗試調用接口方法「無效com.google .maps.api.android.lib6.e.fl.o()」上在com.google.maps.api.android.lib6.eyb(未知來源)一個空對象引用 ....

謝謝!

回答

2

您試圖將一個SupportMapFragment嵌套在一個外部的SupportMapFragment中。

如果您的片段延伸SupportMapFragment,沒有必要誇大任何佈局XML,你可以叫this.getMapAsync()因爲this指SupportMapFragment:

public class MyMapFragment extends SupportMapFragment 
            implements OnMapReadyCallback { 

    private GoogleMap mMap; 
    private Marker marker; 


    public MyMapFragment() { 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

     setUpMapIfNeeded(); 
    } 

    private void setUpMapIfNeeded() { 

     if (mMap == null) { 
      //"this" is a SupportMapFragment, 
      //and "this" implements OnMapReadyCallback 
      // so you can call this.getMapAsync(this) here: 
      getMapAsync(this); 
     } 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 

     mMap = googleMap; 
     setUpMap(); 
    } 

    private void setUpMap() { 

     mMap.setMyLocationEnabled(true); 
     mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 


     mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() { 

      @Override 
      public void onMapClick(LatLng point) { 

       //remove previously placed Marker 
       if (marker != null) { 
        marker.remove(); 
       } 

       //place marker where user just clicked 
       marker = mMap.addMarker(new MarkerOptions().position(point).title("Marker") 
         .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA))); 

      } 
     }); 

    } 

}