问题描述
我有一个 MapFragment
显示地图
如果用户从活动消失(或设备进入睡眠状态)与地图再回来 onResume
被调用,我移动地图回标记
然而,当我移动相机,我得到一个异常
07-23 16:28:42.725:E / AndroidRuntime(19095):java.lang.RuntimeException的:无法恢复活动{ecm2.android/ecm2.android.EMGNoteMapActivity}: java.lang.IllegalStateException:地图的大小不应该是0。最有可能的,布局尚未发生的地图视图。
07-23 16:28:42.725:E / AndroidRuntime(19095):在android.app.ActivityThread.performResumeActivity(ActivityThread.java:2742)
07-23 16:28:42.725:E / AndroidRuntime(19095):在android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2771)
07-23 16:28:42.725:E / AndroidRuntime(19095):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2235)
07-23 16:28:42.725:E / AndroidRuntime(19095):在android.app.ActivityThread.access $ 600(ActivityThread.java:141)
07-23 16:28:42.725:E / AndroidRuntime(19095):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1234)
07-23 16:28:42.725:E / AndroidRuntime(19095):在android.os.Handler.dispatchMessage(Handler.java:99)
07-23 16:28:42.725:E / AndroidRuntime(19095):在android.os.Looper.loop(Looper.java:137)
07-23 16:28:42.725:E / AndroidRuntime(19095):在android.app.ActivityThread.main(ActivityThread.java:5041)
07-23 16:28:42.725:E / AndroidRuntime(19095):在java.lang.reflect.Method.invokeNative(本机方法)
07-23 16:28:42.725:E / AndroidRuntime(19095):在java.lang.reflect.Method.invoke(Method.java:511)
07-23 16:28:42.725:E / AndroidRuntime(19095):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)
07-23 16:28:42.725:E / AndroidRuntime(19095):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-23 16:28:42.725:E / AndroidRuntime(19095):在dalvik.system.NativeStart.main(本机方法)
07-23 16:28:42.725:E / AndroidRuntime(19095):java.lang.IllegalStateException:产生的原因地图的大小不应该是0。最有可能的,布局尚未发生的地图视图。
07-23 16:28:42.725:E / AndroidRuntime(19095):在maps.as.ib(来源不明)
07-23 16:28:42.725:E / AndroidRuntime(19095):在maps.ah.wa(来源不明)
07-23 16:28:42.725:E / AndroidRuntime(19095):在maps.ah.sa(来源不明)
07-23 16:28:42.725:E / AndroidRuntime(19095):在maps.ah.an.b(来源不明)
07-23 16:28:42.725:E / AndroidRuntime(19095):在bgc.onTransact(的SourceFile:92)
07-23 16:28:42.725:E / AndroidRuntime(19095):在android.os.Binder.transact(Binder.java:310)
07-23 16:28:42.725:E / AndroidRuntime(19095):在com.google.android.gms.maps.internal.IGoogleMapDelegate $ A $ a.animateCamera(来源不明)
07-23 16:28:42.725:E / AndroidRuntime(19095):在com.google.android.gms.maps.GoogleMap.animateCamera(来源不明)
07-23 16:28:42.725:E / AndroidRuntime(19095):在ecm2.android.Fragments.EMGMap.centerOnNote(EMGMap.java:340)
07-23 16:28:42.725:E / AndroidRuntime(19095):在ecm2.android.Fragments.EMGMap.fetchMapSettings(EMGMap.java:283)
07-23 16:28:42.725:E / AndroidRuntime(19095):在ecm2.android.Fragments.EMGMap.onResume(EMGMap.java:289)
07-23 16:28:42.725:E / AndroidRuntime(19095):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:917)
07-23 16:28:42.725:E / AndroidRuntime(19095):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
07-23 16:28:42.725:E / AndroidRuntime(19095):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
07-23 16:28:42.725:E / AndroidRuntime(19095):在android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:1820)
07-23 16:28:42.725:E / AndroidRuntime(19095):在android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:412)
07-23 16:28:42.725:E / AndroidRuntime(19095):在android.app.Activity.performResume(Activity.java:5195)
07-23 16:28:42.725:E / AndroidRuntime(19095):在android.app.ActivityThread.performResumeActivity(ActivityThread.java:2732)
07-23 16:28:42.725:E / AndroidRuntime(19095):12 ...更多
这是对我的相机移动我的 onResume
如果(地图= NULL和放大器;!&安培;东北= NULL和放大器;!&安培;!西南= NULL){
map.animateCamera(CameraUpdateFactory.newLatLngBounds(新的LatLngBounds(西南,东北),10));
}否则,如果(地图= NULL和放大器;!&安培;!中心点= NULL){
CameraPosition位置=新CameraPosition.Builder()
.TARGET(中心点).zoom(17).build();
map.animateCamera(CameraUpdateFactory.newCameraPosition(位置));
}
如果我拿出相机运动,它不会崩溃,但不会再回到点,他们搬离,或什么的。
我检查,以确保该地图
不为空,所以我不知道是什么原因造成的错误?
致:java.lang.IllegalStateException:地图的大小不应该为0。最有可能的,布局尚未发生在地图视图。
这应该是足够清晰。你可以不叫
map.animateCamera(CameraUpdateFactory.newLatLngBounds(新的LatLngBounds(西南,东北),10));
在布局完成。您需要使用3参数版本代替。
在这里看到的文档:<$c$c>newLatLngBounds
Aternatively你可能听的布局完成调用 onResume
这code来代替。
I have a MapFragment
that displays a map
if the user goes away from the activity (or the device goes to sleep) with the map then comes back onResume
gets called and I move the map back to a marker.
however when I move the camera I get an exception
07-23 16:28:42.725: E/AndroidRuntime(19095): java.lang.RuntimeException: Unable to resume activity {ecm2.android/ecm2.android.EMGNoteMapActivity}: java.lang.IllegalStateException: Map size should not be 0. Most likely, layout has not yet occured for the map view.
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2742)
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2771)
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2235)
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.os.Handler.dispatchMessage(Handler.java:99)
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.os.Looper.loop(Looper.java:137)
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.app.ActivityThread.main(ActivityThread.java:5041)
07-23 16:28:42.725: E/AndroidRuntime(19095): at java.lang.reflect.Method.invokeNative(Native Method)
07-23 16:28:42.725: E/AndroidRuntime(19095): at java.lang.reflect.Method.invoke(Method.java:511)
07-23 16:28:42.725: E/AndroidRuntime(19095): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-23 16:28:42.725: E/AndroidRuntime(19095): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-23 16:28:42.725: E/AndroidRuntime(19095): at dalvik.system.NativeStart.main(Native Method)
07-23 16:28:42.725: E/AndroidRuntime(19095): Caused by: java.lang.IllegalStateException: Map size should not be 0. Most likely, layout has not yet occured for the map view.
07-23 16:28:42.725: E/AndroidRuntime(19095): at maps.as.i.b(Unknown Source)
07-23 16:28:42.725: E/AndroidRuntime(19095): at maps.ah.w.a(Unknown Source)
07-23 16:28:42.725: E/AndroidRuntime(19095): at maps.ah.s.a(Unknown Source)
07-23 16:28:42.725: E/AndroidRuntime(19095): at maps.ah.an.b(Unknown Source)
07-23 16:28:42.725: E/AndroidRuntime(19095): at bgc.onTransact(SourceFile:92)
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.os.Binder.transact(Binder.java:310)
07-23 16:28:42.725: E/AndroidRuntime(19095): at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a.animateCamera(Unknown Source)
07-23 16:28:42.725: E/AndroidRuntime(19095): at com.google.android.gms.maps.GoogleMap.animateCamera(Unknown Source)
07-23 16:28:42.725: E/AndroidRuntime(19095): at ecm2.android.Fragments.EMGMap.centerOnNote(EMGMap.java:340)
07-23 16:28:42.725: E/AndroidRuntime(19095): at ecm2.android.Fragments.EMGMap.fetchMapSettings(EMGMap.java:283)
07-23 16:28:42.725: E/AndroidRuntime(19095): at ecm2.android.Fragments.EMGMap.onResume(EMGMap.java:289)
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:917)
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:1820)
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:412)
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.app.Activity.performResume(Activity.java:5195)
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2732)
07-23 16:28:42.725: E/AndroidRuntime(19095): ... 12 more
This is my camera movement on my onResume
if(map != null && northEast != null && southWest != null){
map.animateCamera(CameraUpdateFactory.newLatLngBounds(new LatLngBounds(southWest,northEast),10));
}else if(map != null && centerPoint != null){
CameraPosition position = new CameraPosition.Builder()
.target(centerPoint).zoom(17).build();
map.animateCamera(CameraUpdateFactory.newCameraPosition(position));
}
If I take out the camera movement it does not crash but does not go back to the point of they moved away from it or something.
I check to make sure the map
is not null so I do not know what is causing the error?
Caused by: java.lang.IllegalStateException: Map size should not be 0. Most likely, layout has not yet occured for the map view.
This should be clear enough. You cannot call
map.animateCamera(CameraUpdateFactory.newLatLngBounds(new LatLngBounds(southWest,northEast),10));
before the layout is complete. You need to use 3 param version instead.
See the documentation here: newLatLngBounds
Aternatively you may listen for the layout to complete instead of calling this code in onResume
.
这篇关于IllegalStateException异常地图尺寸不应0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!