尝试初始化SupportMapFragment

时间:2016-04-07 19:24:33

标签: android google-maps

我收到此错误:

  

引起:java.lang.NullPointerException:尝试调用虚拟   方法'无效   com.google.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)”   在空对象引用上

因为 mapHotelFragment 始终保持 null ,即使片段存在于布局中也是如此。为什么会这样?

这是否可行,因为如果,我的活动会延伸AppCompatActivity而不是FragmentActivity,那么我如何在GMaps中实施AppCompatActivity

public class CheckinActivity extends AppCompatActivity implements OnMapReadyCallback {
…
SupportMapFragment mapHotelFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.hotel);
mapHotelFragment.getMapAsync(this);
…
  @Override
public void onMapReady(GoogleMap googleMap) {
    mapEventLocation = googleMap;...
}
…
<LinearLayout
        android:id="@+id/hotelMap"
        android:layout_width="match_parent"
        android:layout_height="@dimen/tile_height"
        android:orientation="vertical">


        <fragment
            android:id="@+id/hotel"
            android:name="com.google.android.gms.maps.MapFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/hotelLabel" />
    </LinearLayout>
</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

因为您在xml中使用了MapFragment并尝试在java中获取SupportMapFragment。 因此,如果您想使用MapFragment,请替换

SupportMapFragment mapHotelFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.hotel);

MapFragment mapHotelFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.hotel);

或者如果您想使用SupportMapFragment,请更改

<fragment
    android:id="@+id/hotel"
    android:name="com.google.android.gms.maps.MapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/hotelLabel" />

到这个

<fragment
    android:id="@+id/hotel"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/hotelLabel" />