致命异常:ZoomTableManager

时间:2015-04-24 09:00:15

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

我遇到了一个奇怪的崩溃,我在Google上找不到任何相关内容。搜索 ZoomTableManager 根本不会返回任何结果。

E/AndroidRuntime﹕ FATAL EXCEPTION: ZoomTableManager
Process: com.xxx.yyy, PID: 22129
java.lang.IllegalMonitorStateException: object not locked by thread before notify()
        at java.lang.Object.notifyAll(Native Method)
        at com.google.maps.api.android.lib6.gmm6.m.k.a(Unknown Source)
        at com.google.maps.api.android.lib6.gmm6.m.l.run(Unknown Source)

4 个答案:

答案 0 :(得分:21)

原来发现错误的原因是无效的Google Maps API密钥

最近我们不得不更改应用程序的软件包名称,因此我们使用的API密钥无效,因为您必须按签名和软件包名称指定允许的应用程序。

答案 1 :(得分:1)

当您致电IllegalMonitorStateException并且您没有为obj.notify()保留原始互斥锁时,会发出包含该消息的obj

你应该这样做:

    synchronized (someObj) {
        ...
        someObj.notify();
        ...
    }

或等效,但由于某些原因导致问题的代码遗漏了synchronized位。 (或者,它可以在不同的对象上同步。)

不幸的是,这种情况发生在一些提供Google Maps API实现的混淆代码中。而且您还没有提供任何背景信息。因此,我们几乎不可能猜测正在发生的事情。

我建议您提供更多详细信息。

答案 2 :(得分:0)

解决此问题的方法是申请您的套餐的Google地图公钥。

阻止此崩溃的方法是检查调用mapFragment = new MapFragment()的返回值,如果mapFragment为null,则不要调用fm.beginTransaction().replace(id, mapFragment).commit();

希望它有所帮助。

答案 3 :(得分:0)

在我们的案例中,改变的是用于签署Android应用程序的密钥(而不是API密钥)。 在我们使用生产密钥(存储在密钥库中)之前。该生产密钥已在Google API控制台(https://console.developers.google.com)中启用。

我们在新机器中设置了一个新的开发环境,并且该机器没有像以前那样使用生产密钥,而是使用了android的默认调试密钥(存储在$ HOME / .android / debug中的android默认调试密钥库中)。密钥库)。

解决方案是在Google API控制台中设置android的默认调试密钥SHA1和包名称。

  1. 获取SHA1:

    keytool -v -list -keystore $ HOME / .android / debug.keystore

  2. 复制SHA1:27:4C:CF:A3:E9:75:4A:59:4C:EE:50:21:2B:1C:7B:48:FC:45:4F:77 < / p>

  3. 转到Google API控制台并输入SHA1;包名称(在APIS&amp; Auth&gt; Credentials&gt;编辑允许的Android应用程序中):

  4. 27:4C:CF:A3:E9:75:4A:59:4C:EE:50:21:2B:1C:7B:48:FC:45:4F:77; com.mypackage.name

    享受!