首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android - IllegalStateException:地图大小为零

Android - IllegalStateException:地图大小为零
EN

Stack Overflow用户
提问于 2012-06-25 06:53:50
回答 2查看 2.2K关注 0票数 16

我是一个新手android程序员。

让我给出一些背景。

我的项目使用ActionBarSherlock。

  1. I有一个包含两个片段的活动(Activity1) -一个SherlockListFragment和一个包含谷歌地图MapView (本质上是在列表片段和地图片段中显示的结果)的SherlockListFragment和SherlockFragment,以及一个动作栏选项按钮在列表和地图之间切换当前显示的片段。
  2. 选择列表或搜索结果地图中的一个项目将启动一个显示来自所选项目的数据的新活动(Activity2)。
  3. 此新活动具有类似的流程:显示数据的片段,以及显示位置的地图片段-由操作栏选项按钮切换。

问题是:

  1. 我可以在搜索结果(Activity1)列表片段中选择一个列表项,然后详细信息页面(Activity2)就会启动。当我从(Activity1)中的地图叠加中选择一个地图项时,应用程序会崩溃,我会得到如下所示的堆栈追踪。

到目前为止,我已经尝试了:

  1. 我已经搜索了“地图的大小为零”和许多相同搜索的排列,包括" android“和"illegalstateexception”以及堆栈跟踪的不同行,我检查了一些甚至与android无关的结果,但总体上与谷歌地图的http://www.androidpub.com/1551654有关,除了这个url api之外,我找不到任何遇到这个错误的任何东西或任何人,但我不懂韩语,谷歌翻译也没有太大帮助。
  2. 我试图找到一些源代码片段来了解发生了什么,但这导致在我的代码中添加了日志,试图找出异常发生的位置,我所能找到的就是它发生在(Activity2) details活动开始之后的某个时间,也就是调用onCreate()之后。并且细节片段和映射片段都已在onCreate()中成功实例化。我还没能在我的代码中找到一个地方来捕捉异常。因此,就我所能看到的,这个异常似乎完全是谷歌MapView代码中的一个错误,但是如果我在任何地方犯了一个错误,请一定要显示出来。我乐于接受任何能告诉我这里发生了什么的人的帮助。--

所以,总结一下。当从当前显示映射视图的活动(Activity1)转到另一个活动(Activity2)时发生崩溃,该活动也托管包含另一个映射视图的片段。但是,当从(Activity1)中显示的列表片段转到包含另一个映射片段的另一个活动(Activity2)时,不会发生崩溃。

我希望这是足够的细节。如果您有任何问题,请发表意见。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-24 23:46:42

根据我的经验,在这一点上避免这个bug的唯一方法就是不在片段中使用MapViews。在将MapView添加到父视图后,无论是通过动画还是篡改它的位置来移动它,都会给我带来问题。我发现的最有效的方法是在映射和另一个视图之间切换,其中MapActivity管理MapView,片段管理另一个视图。我再次重新实现了相同的功能,并且没有任何问题。然而,我观察到这是一个未知原因的问题的变通方法(很可能是android地图API中的错误)。

票数 0
EN

Stack Overflow用户

发布于 2013-07-24 12:33:53

我绝对不同意Adam的观点!管理片段和活动是有史以来的最佳实践。

这是完全不同的,有时甚至更难解决一些问题,但如果您计划在应用程序的多个视图中包含地图,则最好将地图片段作为片段本身来管理,或者将地图片段放在另一个片段中以供多个活动使用。

所以,进入要点,因为你没有发布任何代码,我猜你是在为相机设置动画,可能是为了重新设置边界,或者可能只是为你的地图设置初始中心。(很可能是您显示结果后的第一个)

在这种情况下,异常将出现在map.animateCamera(...)行中,因为您正在处理一些可用但尚未膨胀的东西。

试试这个:

代码语言:javascript
复制
try{
        cu = CameraUpdateFactory.newLatLngBounds(yourBoundaries,yourPadding);
        map.animateCamera(cu);
        System.out.println("Set with padding");
    } catch(IllegalStateException e) {
        e.printStackTrace();
        cu = CameraUpdateFactory.newLatLngBounds(yourBoundaries,someWidth,someHeight,zeroPadding);
        map.animateCamera(cu);
        System.out.println("Set with whp");
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11181836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档