2015-04-08 71 views
0

我已经浏览了大量的问题,但似乎无法让它们中的任何一个工作。根据我的理解,我需要摧毁地图,以便下次打开地图时再次载入地图,但似乎无法解决问题。Android谷歌地图在第二次加载时崩溃

目前我有什么低于 XML布局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/map"> 

</RelativeLayout> 

</RelativeLayout> 

然后在我的主要的代码我有:

public class ParkMap extends FragmentActivity implements GoogleMap.OnMarkerClickListener{ 

private GoogleMap mMap; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_park_map); 
    setUpMapIfNeeded(); 

    mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
    mMap.setMyLocationEnabled(true); 
    mMap.getUiSettings().setZoomControlsEnabled(true); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    setUpMapIfNeeded(); 
    mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
    mMap.setMyLocationEnabled(true); 
    mMap.getUiSettings().setZoomControlsEnabled(true); 
} 

public void setUpMapIfNeeded() { 
try { 
     //SupportMapFragment mMapFragment; 
     mMapFragment = SupportMapFragment.newInstance(); 
     FragmentTransaction fragmentTransaction = 
       getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.add(R.id.map, mMapFragment); 
     fragmentTransaction.commit(); 

     if (mMap == null) { 
      // Try to obtain the map from the SupportMapFragment. 
      //mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
      //.getMap(); 
      mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 
    // Do a null check to confirm that we have not already instantiated the map. 

     if (mMap != null) { 
      mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); 
     } 
    } 


    }catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

的上摧毁的东西我想从什么其他的职位,以实现我已阅读,但它不起作用。在旋转屏幕时它也会崩溃,因此我相信这只是它没有捕捉到的变化。

谢谢。

的logcat:

04-08 15:36:20.043 13303-13303/com.zoome.zoomeapp E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.zoome.zoomeapp, PID: 13303 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.zoome.zoomeapp/com.zoome.zoomeapp.ParkMap}: java.lang.NullPointerException 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
     at android.app.ActivityThread.access$800(ActivityThread.java:135) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5001) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
     at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
     at com.zoome.zoomeapp.ParkMap.onCreate(ParkMap.java:98) 
     at android.app.Activity.performCreate(Activity.java:5231) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
at android.app.ActivityThread.access$800(ActivityThread.java:135) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 

+0

帖子堆栈跟踪 –

+0

我如何从运行的应用程序获取它,因为它只发生在我将apk上传到手机而不是在android studio的调试中运行时,因为桌面无法识别要插入的设备 – Navvy

回答

0

试试这个方法:

与预期的行为,您的自定义Mapfragment类。

在你的Fragmentactivity XML上,创建一个FrameLayout并给它一个id(map_container,举例)。

在您的fragmentActivity上创建一个方法,试图用您的自定义类替换框架内的片段(map_container)。如果失败(抛出异常),然后尝试添加它(替换并添加是FragmentManager方法)。

我怀疑你的错误是因为当你第二次访问你的活动时,它试图将你的地图片段添加到已经存在的片段,而它应该替换它。

希望它帮助。是的,logcat将不胜感激,看看错误是什么。

请试试这个方法:

FragmentManager fm = null; 
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
    fm = getActivity().getSupportFragmentManager(); 
} else { 
    fm = getChildFragmentManager(); 
} 
SupportMapFragment fragment = (SupportMapFragment) 
fragment = findFragmentById(R.id.my_map_fragment); 
mMap = fragment.getMap(); 
+0

按照你的建议尝试,但现在得到一个空指针异常,不知道我哪里出错了,但编辑代码 – Navvy

+0

以上可以发布空指针的logcat?谢谢。 – CptEric

+0

在上面加入了谢谢 – Navvy

0

如果你想破坏片段中的应用程序关闭时,将的onDestroy并不总是直接开火。您可以将删除代码移动到onPause中,以测试这是否会对您有所帮助。

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    MapFragment f = (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
    if (f != null){ 
     getFragmentManager().beginTransaction().remove(f).commit(); 
    } 
} 

变为:

@Override 
public void onPause() { 
    super.onPause(); 
    MapFragment f = (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
    if (f != null){ 
     getFragmentManager().beginTransaction().remove(f).commit(); 
    } 
} 
0

我也有类似的情况前几天遇到的。您只需评论mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);并再次尝试你的应用程序。请让我知道发生了什么。