首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NullPointerException SupportMapFragment.getMapAsync

NullPointerException SupportMapFragment.getMapAsync
EN

Stack Overflow用户
提问于 2016-04-08 11:30:49
回答 4查看 752关注 0票数 0

嗨,我正在尝试创建一个应用程序,在其中我将使用SupportMapFragment在一个片段中显示地图,但我得到了NullPointerException。这是完整的错误代码

代码语言:javascript
复制
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)' on a null object reference
at obs.sharemytable.fragment.Search.onCreateView(Search.java:49)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6918)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

Search.java:

代码语言:javascript
复制
public class Search extends Fragment{
  GoogleMap mGoogleMap;

  public static Search newInstance() {
        Search fragment = new Search();
        return fragment;
    }

   @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        final View view = inflater.inflate(R.layout.search_layout, null, false);


        SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager()
                .findFragmentById(R.id.map_container);
        mapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {
                mGoogleMap = googleMap;

                // Add a marker in Sydney and move the camera
                LatLng sydney = new LatLng(-34, 151);
                mGoogleMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
                mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
            }
        });

        return view;
    }
}

search_layout.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white">

    <include
        android:id="@+id/searchToolbar"
        layout="@layout/toolbar" />
    <com.google.android.gms.maps.MapView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/map_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </com.google.android.gms.maps.MapView>

</LinearLayout>

有人能猜出我在这里犯了什么错吗。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-04-08 12:06:57

谢谢@MojioMS现在为我工作。这是我为工作所做的改变。

更改此search_layout.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white">

    <include
        android:id="@+id/searchToolbar"
        layout="@layout/toolbar" />
    <com.google.android.gms.maps.MapView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/map_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </com.google.android.gms.maps.MapView>

</LinearLayout>

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white">

    <include
        android:id="@+id/searchToolbar"
        layout="@layout/toolbar" />
    <fragment
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/map_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment">
    </fragment>

</LinearLayout>
票数 0
EN

Stack Overflow用户

发布于 2016-04-08 11:34:09

尝试从活动中获取FragmentManager并使用它获取您的地图:

代码语言:javascript
复制
FragmentManager mFragmentManager = getActivity().getSupportFragmentManager();

final SupportMapFragment mapFragment  = (SupportMapFragment) mFragmentManager
            .findFragmentById(R.id.map_container);
票数 0
EN

Stack Overflow用户

发布于 2016-04-08 11:52:24

代码语言:javascript
复制
SupportMapFragment mapFragment = ((SupportMapFragment) getActivity().fragmentManager.findFragmentById(R.id.location_map))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36498498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档