我有一个基于Google Maps Api V2的应用。该应用程序在启动时显示地图,直到现在,Google地图是唯一可用的地图提供商。我唯一的例外是:
java.lang.NullPointerException
at com.google.maps.api.android.lib6.gmm6.m.c.n.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.m.c.n.(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.m.c.e.(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.m.l.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.m.cv.f(Unknown Source)
我不确定这是否与this reported issue有关,但这不是Google地图(包含在Google Play服务中)出现的第一个问题,我没有别的选择,只能等待修复。因此,我决定将Open Street Maps添加为备用提供商。
添加新的地图提供商非常简单。为崩溃制定解决方法并非易事。我花了大约3个星期试图找到解决这个问题的方法。我觉得我已经尝试了所有东西,所以我来到这里看看是否还有其他解决方案。
到目前为止,我试图用UncaughtExceptionHandler
捕获异常,似乎它曾经工作过一次(大约2周前),我无法再次重现相同的代码。
强制我的设备上的Google地图崩溃(通过更改Manifest中的api密钥标签)实际上被UncaughtExceptionHandler
抓住了,但不幸的是它对我的用户设备上的实际问题没有用。
我尝试同时使用getMap()
和getMapAsync()
。
我试图在与Google地图建立连接的地方添加try-catch
块,就像我启动片段一样,而getMapAsync()
则没有成功。
我尝试在另一个主要活动中启动Google地图(遵循Google Maps Api V2 guide中的相同示例),与我的其他应用活动没有任何关联,但我没有成功捕获导致应用程序崩溃的异常。
我强迫应用程序从Open Street Maps开始,它运行得很好。
我的计划是抓住谷歌地图崩溃并用Open Street Maps重新启动应用程序,但我真的找不到一个好的解决方案。我的意思是,我设法完成了这项工作,但它只适用于我的设备(Xperia Z1 Compact with Android 5.1.1),我无法重现我的用户所遇到的问题。
到目前为止,我有2位用户通过电子邮件抱怨此问题。它们都有Android 4.2.1,内核版本为3.4.5,Google Play Services版本为8.4.89(2428711-036)。
我在谷歌开发者控制台中也有这个例外,没有特定设备模式的其他用户报告(我不知道这是否与我现在试图绕过的NPE有关):
java.lang.RuntimeException: Unable to resume activity {android.package.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3050)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3081)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2447)
at android.app.ActivityThread.access$800(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5373)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
Caused by: java.lang.NullPointerException
at com.google.a.a.ae.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.c.k.<init>(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.c.k.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.c.y.a(Unknown Source)
at com.google.maps.api.android.lib6.e.bd.a(Unknown Source)
at com.google.maps.api.android.lib6.e.ev.a(Unknown Source)
at com.google.maps.api.android.lib6.e.z.a(Unknown Source)
at com.google.maps.api.android.lib6.e.y.a(Unknown Source)
at com.google.android.gms.maps.internal.u.onTransact(SourceFile:107)
at android.os.Binder.transact(Binder.java:380)
at com.google.android.gms.maps.a.l.a(Unknown Source)
at com.google.android.gms.maps.o.a(Unknown Source)
at com.google.android.gms.b.f.a(Unknown Source)
at com.google.android.gms.b.b.a(Unknown Source)
at com.google.android.gms.b.b.a(Unknown Source)
at com.google.android.gms.maps.n.onCreateView(Unknown Source)
at android.support.v4.app.Fragment.performCreateView(SourceFile:1789)
at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:955)
at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1138)
at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1120)
at android.support.v4.app.FragmentManagerImpl.dispatchResume(SourceFile:1939)
at android.support.v4.app.FragmentActivity.onResumeFragments(SourceFile:447)
at android.support.v4.app.FragmentActivity.onPostResume(SourceFile:436)
at android.support.v7.app.ad.onPostResume(SourceFile:138)
at android.app.Activity.performResume(Activity.java:6089)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3039)
... 11 more
如果谷歌地图在启动时崩溃,您认为如何捕捉谷歌地图崩溃或我应该采取哪些解决方法来加载开放街道地图?