5

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

}

ここで、自動生成されたMapViewを参照して、機能をマップに追加できるようにします。

initMap();私が取得しようとするとNullPointerException

エラー:

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)
4

3 に答える 3

8

これは予想される動作です。

getMap()フラグメントが通過した後にのみ呼び出すことができます。onCreateView()それ以外の場合は、が表示されますnullnullGooglePlayサービスが利用できない場合にも受け取ることができます。

つまり、を呼び出しinitMap()ますonResume()

詳細はこちらで確認できます。

それが役に立てば幸い!

于 2012-12-09T23:30:12.530 に答える
6

私はついにそれを解決しました、あなたはオーバーライドgetMap()する必要はありません、そしてあなたはmMap変数を必要としません、GoogleMapはクラスに含まれています。最後に、onResumeでinitMap()を呼び出す必要があります。

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

}

それがグーグルマップAPIのv2で始めている他の人々(私のように:D)に役立つことを願っています。

于 2013-01-24T09:17:34.443 に答える
0

問題はonCreateViewにあります。super.onCreateView()を呼び出すのを忘れました。これを確認してください

于 2013-09-27T20:57:41.080 に答える