【发布时间】:2012-06-26 06:22:51
【问题描述】:
我是一名新手 android 程序员。
让我提供一些背景信息。
我的项目使用 ActionBarSherlock。
- 我有一个包含两个片段的活动 (Activity1) - 一个 SherlockListFragment 和一个包含谷歌地图 MapView(本质上是 MapFragment)的 SherlockFragment。
- 搜索结果显示在列表片段和地图片段中,操作栏选项按钮在列表和地图之间切换当前显示的片段。
- 在列表或搜索结果地图中选择一个项目会启动一个新活动 (Activity2),以显示所选项目的数据。
- 这个新活动有一个类似的流程:一个显示数据的片段和一个显示位置的地图片段 - 由操作栏选项按钮切换。
问题:
- 我可以在搜索结果(Activity1)列表片段中选择一个列表项,详细信息页面(Activity2)启动成功。
- 当我从 (Activity1) 中的地图叠加层中选择一个地图项时,应用程序崩溃,我得到如下所示的堆栈跟踪。
到目前为止我已经尝试过:
- 我搜索了“map has zero size”和同一搜索的许多排列,包括“android”和“illegalstateexception”以及堆栈跟踪的各个行,我检查了甚至与 android 无关但一般与谷歌地图API有关,除了这个网址http://www.androidpub.com/1551654之外,我无法在任何地方找到遇到此错误的任何人或任何人但我不懂韩语,谷歌翻译并没有太大帮助.
- 我试图找到源代码的一些 sn-ps 以查看发生了什么,但没有任何结果。
- 我已经在我的代码中添加了日志以尝试查明异常发生的位置,而我所能找到的只是它发生在 (Activity2) 详细信息活动开始之后的某个时间,即 onCreate( ) 叫做。并且细节片段和地图片段都已在 onCreate() 中成功实例化。我什至无法在我的代码中找到一个位置来捕获异常。因此,就我所见,这个异常似乎完全是谷歌 MapView 代码中的一个错误,但如果我在任何地方犯了错误,请务必显示出来。我愿意向任何能告诉我这里发生了什么的人提供帮助。
所以,总而言之。当从具有当前显示地图视图的活动 (Activity1) 转到另一个活动 (Activity2) 时,会发生崩溃,该活动也承载包含另一个地图视图的片段。但是当从 (Activity1) 中显示的列表片段转到包含另一个地图片段的另一个活动 (Activity2) 时,不会发生崩溃。
我希望这是足够的细节。如果您有任何问题,请发表评论。
D/memalloc( 121): /dev/pmem: Allocated buffer base:0x4215c000 size:2088960 offset:4177920 fd:66
D/memalloc(30944): /dev/pmem: Mapped buffer base:0x5b4f5000 size:6266880 offset:4177920 fd:164
D/AndroidRuntime(30944): Shutting down VM
W/dalvikvm(30944): threadid=1: thread exiting with uncaught exception (group=0x40aaa228)
E/AndroidRuntime(30944): FATAL EXCEPTION: main
E/AndroidRuntime(30944): java.lang.IllegalStateException: Map has zero size
E/AndroidRuntime(30944): at android_maps_conflict_avoidance.com.google.googlenav.map.Map.drawMap(Map.java:818)
E/AndroidRuntime(30944): at com.google.android.maps.MapView.drawMap(MapView.java:1091)
E/AndroidRuntime(30944): at com.google.android.maps.MapView.onDraw(MapView.java:522)
E/AndroidRuntime(30944): at android.view.View.draw(View.java:11071)
E/AndroidRuntime(30944): at android.view.View.getDisplayList(View.java:10462)
E/AndroidRuntime(30944): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2605)
E/AndroidRuntime(30944): at android.view.View.getDisplayList(View.java:10425)
E/AndroidRuntime(30944): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2605)
E/AndroidRuntime(30944): at android.view.View.getDisplayList(View.java:10425)
E/AndroidRuntime(30944): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2605)
E/AndroidRuntime(30944): at android.view.View.getDisplayList(View.java:10425)
E/AndroidRuntime(30944): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2605)
E/AndroidRuntime(30944): at android.view.View.getDisplayList(View.java:10425)
E/AndroidRuntime(30944): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2605)
E/AndroidRuntime(30944): at android.view.View.getDisplayList(View.java:10425)
E/AndroidRuntime(30944): at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:879)
E/AndroidRuntime(30944): at android.view.ViewRootImpl.draw(ViewRootImpl.java:1948)
E/AndroidRuntime(30944): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1654)
E/AndroidRuntime(30944): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2498)
E/AndroidRuntime(30944): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(30944): at android.os.Looper.loop(Looper.java:154)
E/AndroidRuntime(30944): at android.app.ActivityThread.main(ActivityThread.java:4894)
E/AndroidRuntime(30944): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(30944): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(30944): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime(30944): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/AndroidRuntime(30944): at dalvik.system.NativeStart.main(Native Method)
E/EmbeddedLogger( 254): App crashed! Process: com.myapp.android
E/EmbeddedLogger( 254): App crashed! Package: com.myapp.android v5 (2.0)
E/EmbeddedLogger( 254): Application Label: myapp
W/ActivityManager( 254): Force finishing activity com.myapp.android/.activity.InfoActivity
W/ActivityManager( 254): Force finishing activity com.myapp.android/.activity.SearchActivity
【问题讨论】:
-
我在搜索相同的错误消息“地图大小为零”时发现了这个线程,我发现我不小心将另一个项目设置为“match_parent”而不是“wrap_content”,从而推动了地图视图屏幕 - 导致此错误。你确定你的布局真的可以显示 MapView 吗?
-
我也遇到了同样的问题,我在 XML 文件中做了一些更改
-
您是否对包含 mapview 的两个活动使用不同的进程。 stackoverflow.com/questions/3379575/…
-
能否请您也发布您的代码?
-
我正在做的项目是闭源的,我已经更改了代码。但是为了更新,我最终只使用了一个带有一个 MapView 的活动,并使用通过意图传递的整数作为模式来指示我希望从活动中获得哪些视图和行为。这是一个 hack,但我需要快速完成这个项目,它工作得很好,但它是混乱的代码。之后我还注意到,当我尝试为 MapView 设置动画时(我正在制作幻灯片动画),发生了同样的错误,但是当我为布局中的其他视图设置动画并且保持 MapView 不动时,没有发生异常。
标签: android google-maps android-fragments android-mapview android-fragmentactivity