【问题标题】:GoogleMap FATAL EXCEPTION when getFragmentManager获取FragmentManager时的GoogleMap FATAL EXCEPTION
【发布时间】:2013-01-19 18:13:26
【问题描述】:

我有一个完美运行的地图活动,但是当我添加标记时出现错误并且没有找到任何解决问题的方法。

公共类 MapActiv 扩展 FragmentActivity {

//private GoogleMap map;

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map_fragment);
    GoogleMap mGMap = ((MapFragment) 
            getFragmentManager().findFragmentById(R.id.map)).getMap();
    mGMap.addMarker(new MarkerOptions().position(new LatLng(46.24801, 26.76173))
    .title("Title").draggable(false));
}

}

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment"
    map:cameraTargetLat="46.24801"
    map:cameraTargetLng="26.76173"
    map:cameraTilt="30"
    map:cameraZoom="18"
    map:uiCompass="false"
    map:uiRotateGestures="true"
    map:uiScrollGestures="true"
    map:uiTiltGestures="true"
    map:uiZoomControls="false"
    map:uiZoomGestures="true"/>

01-19 19:48:15.805:E/AndroidRuntime(16616):致命异常:主要 01-19 19:48:15.805:E/AndroidRuntime(16616): java.lang.NoSuchMethodError:com.ex.myschoolapp.MapActiv.getFragmentManager 01-19 19:48:15.805: E/AndroidRuntime(16616): 在 com.ex.myschoolapp.MapActiv.onCreate(MapActiv.java:23) 01-19 19:48:15.805: E/AndroidRuntime(16616): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 01-19 19:48:15.805: E/AndroidRuntime(16616): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623) 01-19 19:48:15.805: E/AndroidRuntime(16616): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675) 01-19 19:48:15.805: E/AndroidRuntime(16616): 在 android.app.ActivityThread.access$1500(ActivityThread.java:121) 01-19 19:48:15.805: E/AndroidRuntime(16616): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:943) 01-19 19:48:15.805: E/AndroidRuntime(16616): 在 android.os.Handler.dispatchMessage(Handler.java:99) 01-19 19:48:15.805: E/AndroidRuntime(16616): 在 android.os.Looper.loop(Looper.java:123) 01-19 19:48:15.805: E/AndroidRuntime(16616): 在 android.app.ActivityThread.main(ActivityThread.java:3701) 01-19 19:48:15.805:E/AndroidRuntime(16616):在 java.lang.reflect.Method.invokeNative(Native Method) 01-19 19:48:15.805:E/AndroidRuntime(16616):在 java.lang.reflect.Method.invoke(Method.java:507) 01-19 19:48:15.805: E/AndroidRuntime(16616): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862) 01-19 19:48:15.805: E/AndroidRuntime(16616): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 01-19 19:48:15.805: E/AndroidRuntime(16616): at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

    标签: google-maps android-fragmentactivity google-maps-android-api-2


    【解决方案1】:

    试试这个(请记住,如果您使用的是

    import android.os.Bundle;
    import android.support.v4.app.FragmentManager;
    import android.view.LayoutInflater;
    import android.view.View;
    
        import com.google.android.gms.maps.GoogleMap;
        import com.google.android.gms.maps.GoogleMap.InfoWindowAdapter;
        import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
        import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener;
        import com.google.android.gms.maps.GoogleMap.OnMarkerClickListener;
        import com.google.android.gms.maps.SupportMapFragment;
        import com.google.android.gms.maps.model.LatLng;
        import com.google.android.gms.maps.model.Marker;
        import com.google.android.gms.maps.model.MarkerOptions;
        public class MainActivity extends android.support.v4.app.FragmentActivity implements OnMapClickListener, OnMapLongClickListener{
            private GoogleMap myMap;
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                FragmentManager myFragmentManager = getSupportFragmentManager();
                SupportMapFragment myMapFragment 
                   = (SupportMapFragment)myFragmentManager.findFragmentById(R.id.map);
                  myMap = myMapFragment.getMap();
                  myMap.setOnMapLongClickListener(this);
                  myMap.setOnMapClickListener(this);
                  myMap.setInfoWindowAdapter(new MiInfoWindowAdapter());
                  myMap.setOnMarkerClickListener(new OnMarkerClickListener() {
    
                    @Override
                    public boolean onMarkerClick(Marker marker) {
                        // TODO Auto-generated method stub
                        marker.hideInfoWindow();
                        return false;
                    }
                });
    
            }
    
             @Override
             public void onMapLongClick(LatLng point) {
    
                 myMap.addMarker(new MarkerOptions().position(point).title(point.toString()));
             }
    
            @Override
            public void onMapClick(LatLng point) {
                // TODO Auto-generated method stub
                myMap.addMarker(new MarkerOptions().position(point).title(point.toString()));
    
            }
    
            public class MiInfoWindowAdapter implements InfoWindowAdapter{
    
                @Override
                public View getInfoContents(Marker marker) {
                    LayoutInflater inflater = getLayoutInflater().from(getApplicationContext());
                    View view = inflater.inflate(R.layout.info, null);
                    marker.setDraggable(true);
                    return view;
                }
    
                @Override
                public View getInfoWindow(Marker marker) {
                    LayoutInflater inflater = getLayoutInflater().from(getApplicationContext());
                    View view = inflater.inflate(R.layout.info, null);
                    marker.setDraggable(true);
                    return view;
                }
    
            }
        }
    

    【讨论】:

      【解决方案2】:

      当应用程序使用外部库时,可能会引发 NoSuchMethodError 错误。假设您的应用程序是使用特定版本的外部库编译和执行的。在某些时候,外部库发生了变化,一些方法被删除或更新。如果您的应用程序的类路径没有更新,并且您的代码没有使用最新版本的外部库编译,那么在运行时您将调用一个不再存在的方法并抛出 NoSuchMethodError 错误。

      所以我更新了 Google Map API

      来自:com.google.android.gms:play-services-maps:7.5.0

      收件人:com.google.android.gms:play-services-maps:7.8.0

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-14
        • 2017-01-06
        • 1970-01-01
        • 2017-02-18
        • 1970-01-01
        • 1970-01-01
        • 2015-07-26
        相关资源
        最近更新 更多