您的位置:首页 > 编程语言 > Java开发

Serializable报错问题,java.lang.RuntimeException: Parce

2015-04-10 00:00 260 查看
代码中使用Parcel在两个Activity中进行数据传送,Parcel需要实现Parcelable接口。而如果在Parcel类中,需要读或者写其他的bean数据的话,这些bean需要实现Serializable序列化接口。不然会出现java.lang.RuntimeException: Parcel: unable to marshal value错误!

public static ProgramInformationFragment newInstance(List<ChannelItem> items) {
ProgramInformationFragment fragment = new ProgramInformationFragment();
Bundle args = new Bundle();
//将items作为Serializable传到bundle
args.putSerializable(KEY_PROGRAM_ITEMS, (Serializable) items);
fragment.setArguments(args);
return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mProgramItems = (ArrayList<ChannelItem>) getArguments().getSerializable(KEY_PROGRAM_ITEMS);
Logger.i("lfj mProgramItems.size = " + mProgramItems.size());
}
}

而没有没有实现Serializable时会出现错误。

04-10 12:12:01.616    7702-7702/**.**.android.debug E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Parcel: unable to marshal value jp.nhkworldtv.android.model.ChannelItem@41b981a0
at android.os.Parcel.writeValue(Parcel.java:1137)
at android.os.Parcel.writeList(Parcel.java:524)
at android.os.Parcel.writeValue(Parcel.java:1097)
at android.os.Parcel.writeMapInternal(Parcel.java:493)
at android.os.Bundle.writeToParcel(Bundle.java:1612)
at android.os.Parcel.writeBundle(Parcel.java:507)
at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:136)
at android.os.Parcel.writeTypedArray(Parcel.java:1004)
at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:383)
at android.os.Parcel.writeParcelable(Parcel.java:1156)
at android.os.Parcel.writeValue(Parcel.java:1075)
at android.os.Parcel.writeMapInternal(Parcel.java:493)
at android.os.Bundle.writeToParcel(Bundle.java:1612)
at android.os.Parcel.writeBundle(Parcel.java:507)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:2016)
at android.app.ActivityThread.handleStopActivity(ActivityThread.java:2880)
at android.app.ActivityThread.access$900(ActivityThread.java:128)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1175)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4514)
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:980)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
at dalvik.system.NativeStart.main(Native Method)

修改方法是需要在所调用的类中实现Serializable。

public class ChannelItem implements Serializable{
/**
* シリアル。
*/
private static final long serialVersionUID = 1L;
private String mSeriesId;
private String mAiringId;
.
.
.


参考了如下文章:

http://blog.csdn.net/huim_lin/article/details/16959865
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐