android - 打包Parcel时出现空指针异常

标签 android nullpointerexception parcel

我刚刚收到第一份空指针异常报告,这对我来说毫无意义......

java.lang.NullPointerException
at com.kd7uiy.hamfinder.Subjects.DxccSubject.a(Unknown Source)
at com.kd7uiy.hamfinder.Subjects.AbstractSubject.writeToParcel(Unknown Source)
at android.os.Parcel.writeParcelable(Parcel.java:1254)
at android.os.Parcel.writeValue(Parcel.java:1173)
at android.os.Parcel.writeMapInternal(Parcel.java:591)
at android.os.Bundle.writeToParcel(Bundle.java:1627)
at android.os.Parcel.writeBundle(Parcel.java:605)
at com.kd7uiy.hamfinder.Broker.writeToParcel(Unknown Source)
at android.os.Parcel.writeParcelable(Parcel.java:1254)
at android.os.Parcel.writeValue(Parcel.java:1173)
at android.os.Parcel.writeMapInternal(Parcel.java:591)
at android.os.Bundle.writeToParcel(Bundle.java:1627)
at android.os.Parcel.writeBundle(Parcel.java:605)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:2260)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3186)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5233)
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:795)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
at dalvik.system.NativeStart.main(Native Method)

引用的函数是这样的:

@Override
Bundle packageContents() {
    Bundle out = new Bundle();
    out.putInt("State", getState());
    return out;
}

请注意,NPE 不在 getState() 中。怎么可能导致NPE?我唯一能想到的是类实际上是在调用函数的过程中被销毁的,但这并没有什么意义。有什么想法吗?

只是为了好玩,下面是关于 getState 的规范。它是Abstract Subject的一部分,其整个功能如下:

Type mState = null; //Defined at the class level

public Type getState() {
    return mState;
}

AbstractSubject 是一个泛型类,在DxccSubject 的情况下,类型是Integer。

最佳答案

这个解释看起来很琐碎所以我怀疑你没有想到,但是......

Bundle.putInt()接收一个 int 值。您的 getState() 通用方法返回此类的 Integer。在 Java 中,将 null Integer 自动拆箱为 int(或任何其他装箱基元,例如 Long、Float 和 &c)将抛出 NullPointerException。可能是因为编译器只是将其替换为 getState().intValue().

writeToParcel() 被调用时,mState 是否可能只是 null?

关于android - 打包Parcel时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24101863/

相关文章:

android - 我应该创建一个既可序列化又可打包的类吗?

android - 即使LiveData仅更新一次,也可以从协同程序发布到LiveData到更新UI

iphone - 我可以避免在 iPhone 或 android 上使用 HTML5 的原生全屏视频播放器吗?

android - 具有动态项目高度的水平 RecyclerView

java - 尝试使用 JavaFX 播放音频文件

Android 在 Android 上的 Activity 之间发送 ArrayList<ParseObject> 时出错。包裹 : unable to marshal value com. parse.ParseObject@b308c828 错误

android - SmsManager 执行了几次

java - 什么是 NullPointerException,我该如何解决?

java - 如何访问膨胀布局内的 TextView 的值

android - 我怎么知道我的 Parcel.readStringArray() 数组有多大?