android – 来自Parcel.readException的NullPointerException(等)

前端之家收集整理的这篇文章主要介绍了android – 来自Parcel.readException的NullPointerException(等)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
看起来像这样的例外令人困惑:
FATAL EXCEPTION: main
java.lang.NullPointerException
    at android.os.Parcel.readException(Parcel.java:1437)
    at android.os.Parcel.readException(Parcel.java:1385)
    at com.yourpackage.ipc.IYourClass$Stub$Proxy.yourMethod(IYourClass.java:488)
    at com.yourpackage.ipc.YourClassShim.yourMethod(YourClassShim.java:269)

我找到了一堆相关的问题,但没有一个回答“你如何调试这个”.所以我正在提出这个问题/答案.

通过查看android源码herehere,你会发现它可以抛出任何这些(NullPointerException就是我所拥有的):

SecurityException(msg);
BadParcelableException(msg);
IllegalArgumentException(msg);
NullPointerException(msg);
IllegalStateException(msg);
RuntimeException("Unknown exception code: " + code + " msg " + msg);

但究竟是什么导致了这些?

解决方法

这里发生的是readException()正在检查IPC字节流中是否有一个标题,表明发生了异常;如果它找到一个,那么它会抛出该类型的新异常,并使用相同的消息,但是缺少原始堆栈跟踪. (它实际上只知道一些异常类型;其他任何东西都被转换为基本的RuntimeException.)

那么最初的例外来自哪里?好吧,在YourClass.yourMethod()的实际实现的某个地方 – 不在任何parcelable或IPC代码中.所以去那里,将整个方法包装在try / catch中,并记录你抓到的任何内容.

(或者如果你有远程进程断点工作,那么在那里设置一个断点.)

猜你在找的Android相关文章