tej*_*jas 1 android unmarshalling parcelable runtimeexception
这是我写入包裹的代码
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(poiDescription);
dest.writeString(latitude);
dest.writeString(longitude);
dest.writeString(placeName);
dest.writeString(plistPath);
dest.writeString(poiDirName);
if (null != isMascotPresent)
dest.writeString(isMascotPresent);
if (null != startMascottTime)
dest.writeInt(startMascottTime);
if (null != mascottDuration)
dest.writeInt(mascottDuration);
}
public PointOfInterest(Parcel source) {
poiDescription = source.readString();
latitude = source.readString();
longitude = source.readString();
placeName = source.readString();
plistPath = source.readString();
poiDirName = source.readString();
audioLinkDownload = source.readString();
audioLinkStream = source.readString();
poiName = source.readString();
poiIndex = source.readInt();
poiPaused = source.readString();
source.readList(imageList, null);
source.readList(durationList, null);
if (null != isMascotPresent)
isMascotPresent = source.readString();
if (null != startMascottTime)
startMascottTime=source.readInt();
if (null != mascottDuration)
mascottDuration=source.readInt();
}
This is how I am reading the values
listOfPOI = getIntent().getParcelableArrayListExtra("poi");
Run Code Online (Sandbox Code Playgroud)
没有上面的吉祥物,这个鳕鱼工作正常.
但是当我添加关于吉祥物的3行时,我的应用程序崩溃了.我正在打破这个问题,我不知道为什么会发生这种情况,有人可以让我知道这个问题吗?
我得到运行时异常和问题,说明parcelable有解组错误
这是我得到的例外
ERROR/AndroidRuntime(2061): FATAL EXCEPTION: main
ERROR/AndroidRuntime(2061): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Invenger/com.Invenger.Player.Audio}: java.lang.RuntimeException: Parcel android.os.Parcel@40570848: Unmarshalling unknown type code 7536748 at offset 1064
ERROR/AndroidRuntime(2061): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
ERROR/AndroidRuntime(2061): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
ERROR/AndroidRuntime(2061): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
ERROR/AndroidRuntime(2061): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
ERROR/AndroidRuntime(2061): at android.os.Handler.dispatchMessage(Handler.java:99)
ERROR/AndroidRuntime(2061): at android.os.Looper.loop(Looper.java:130)
ERROR/AndroidRuntime(2061): at android.app.ActivityThread.main(ActivityThread.java:3683)
ERROR/AndroidRuntime(2061): at java.lang.reflect.Method.invokeNative(Native Method)
ERROR/AndroidRuntime(2061): at java.lang.reflect.Method.invoke(Method.java:507)
ERROR/AndroidRuntime(2061): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
ERROR/AndroidRuntime(2061): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
ERROR/AndroidRuntime(2061): at dalvik.system.NativeStart.main(Native Method)
ERROR/AndroidRuntime(2061): Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@40570848: Unmarshalling unknown type code 7536748 at offset 1064
ERROR/AndroidRuntime(2061): at android.os.Parcel.readValue(Parcel.java:1913)
ERROR/AndroidRuntime(2061): at android.os.Parcel.readListInternal(Parcel.java:2092)
ERROR/AndroidRuntime(2061): at android.os.Parcel.readArrayList(Parcel.java:1536)
ERROR/AndroidRuntime(2061): at android.os.Parcel.readValue(Parcel.java:1867)
ERROR/AndroidRuntime(2061): at android.os.Parcel.readMapInternal(Parcel.java:2083)
ERROR/AndroidRuntime(2061): at android.os.Bundle.unparcel(Bundle.java:208)
ERROR/AndroidRuntime(2061): at android.os.Bundle.getParcelableArrayList(Bundle.java:1144)
ERROR/AndroidRuntime(2061): at android.content.Intent.getParcelableArrayListExtra(Intent.java:3448)
ERROR/AndroidRuntime(2061): at com.Invenger.Player.Audio.onCreate(Audio.java:162)
ERROR/AndroidRuntime(2061): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
ERROR/AndroidRuntime(2061): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
ERROR/AndroidRuntime(2061): ... 11 more
Run Code Online (Sandbox Code Playgroud)
Joh*_*bot 12
除非你初始化isMascotPresent,startMascottTime以及mascottDuration地方他们总是会null在构造函数中,PointOfInterest(Parcel source).因此,即使您在分配对象时写入值,也不会读取它们,并且以下值将不正确.
取而代之的检查,如果他们null读/写吉祥物简介您可以使用时boolean:
if (null != isMascotPresent) {
dest.writeByte((byte) 1);
dest.writeString(isMascotPresent);
dest.writeInt(startMascottTime);
dest.writeInt(mascottDuration);
} else {
dest.writeByte((byte) 0);
}
Run Code Online (Sandbox Code Playgroud)
并阅读它:
if(source.readByte() == 1) {
isMascotPresent = source.readString();
startMascottTime = source.readInt();
mascottDuration = source.readInt();
} else {
isMascotPresent = null;
startMascottTime = null;
mascottDuration = null;
}
Run Code Online (Sandbox Code Playgroud)
而且你也在阅读更多的价值而不是写到包裹里.需要以相同的顺序写入和读取值.
| 归档时间: |
|
| 查看次数: |
6141 次 |
| 最近记录: |