安卓NullPointerException在Instrumentation.execStartActivity中

25

我一直收到一些用户报告以下异常:

java.lang.NullPointerException
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1414)
    at android.app.Activity.startActivityForResult(Activity.java:2880)
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:817)
    at android.app.Activity.startActivity(Activity.java:2986)
    at com.google.android.gms.internal.bb$5.onClick(Unknown Source)
    at android.view.View.performClick(View.java:2535)
    at android.view.View$PerformClick.run(View.java:9130)
    at android.os.Handler.handleCallback(Handler.java:618)
    at android.os.Handler.dispatchMessage(Handler.java:123)
    at android.os.Looper.loop(SourceFile:351)
    at android.app.ActivityThread.main(ActivityThread.java:3826)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:538)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:969)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:727)
    at dalvik.system.NativeStart.main(Native Method)

我在这里发现了一个类似的问题,但是自四月份以来还没有得到解决。 我所知道的就是它在三星Galaxy Y(GT-S5360)上被重现,并且我正在使用Google Maps Android API v2。

你有任何想法如何为此制定解决方案吗?


在三星GT I9500(Galaxy S4)上发现了类似的问题,但是在第1416行。有趣的是,我也在使用Google Maps API v2,并且一直收到与地图相关的各种错误。 - TheIT
2个回答

17

我有同样的错误,我也使用Google Maps API。似乎在所有Android版本和手机上都会发生。举几个例子:

AN10DG3, GT-I8190, F815, GT-I9300, GOOPHONE, HTC One, KFTT, MID8127, KFAPWI, AN10DG3

java.lang.NullPointerException
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1409)
at android.app.Activity.startActivityForResult(Activity.java:3351)
at android.app.Activity.startActivityForResult(Activity.java:3312)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:839)
at android.app.Activity.startActivity(Activity.java:3522)
at android.app.Activity.startActivity(Activity.java:3490)
at com.google.android.gms.dynamic.a$5.onClick(Unknown Source)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method) 

据我所读,解决方案如下:

如果您的模拟器或设备中未安装 Google Play 服务,则可能会出现上述问题。我没有完美的解决方案,但是我找到了一些解决方法,可以避免您的应用程序崩溃。在这种情况下,您需要按照以下简单步骤操作:

  1. 覆盖 startActivityForResult(intent, requestcode)
  2. 在 startActivityForResult 中添加 super.startActivityForResult 的超级调用 try catch,并捕获空指针异常

很容易就做到了,现在您可以在此处捕获 nullpointerexception 并在 catch 中添加错误处理

@Override
public void startActivityForResult(Intent intent, int requestCode) {
    try {
        super.startActivityForResult(intent, requestCode);
    } catch (Exception e) {
        // fixes Google Maps bug: https://dev59.com/8WMm5IYBdhLWcg3whfSe#20905954
    }
}

应该重写哪个类的startActivityForResult方法? - JY2k
继承自Activity或FragmentActivity并导致崩溃的那个。 - Malachiasz
@steelbytes:能否解释一下?你怎么知道这个错误是由com.android.vending引起的? - Malachiasz
@Malachiasz:我也遇到了这个问题,所以我在catch期间记录了意图的值,并发现它始终是com.android.vending(缺失)。由于我只想在没有playservices / playstore的手机上由MapView引起时隐藏此异常,因此我添加了对intent.pkg的过滤器,因为我不想隐藏其他异常(例如,如果我的代码调用startActivityForResult)。 - SteelBytes
@SteelBytes 这很有趣,对我来说, intentnull。Malachiasz,我能否建议一些东西:不要吞掉 Exception (顺便说一下,应该只有 NPE),最好是 onActivityResult(requestCode、RESULT_CANCELED、intent);,因为这个代码非常可能已经处理了非 RESULT_OK 的情况。 - TWiStErRob

0

在我的情况下,崩溃发生在Instrumentation.java文件中

第1581行,

android.util.SeempLog.record_str(377, intent.toString());

如果intent为空,则会出现NPE(NullPointerException)

不确定如何修复此问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接