Serializableエラーメッセージlang.RuntimeException: Parce
コードではParcelを使用して2つのActivityでデータ転送を行い、ParcelはParcelableインタフェースを実装する必要があります.Parcelクラスで他のbeanデータを読み書きする必要がある場合、これらのbeanはSerializableシーケンス化インタフェースを実現する必要があります.さもないとjavaが現れます.lang.RuntimeException:Parcel:unable to marshal valueエラー!
Serializableが実装されていない場合はエラーが発生します.
変更方法は、呼び出されたクラスでSerializableを実装する必要があります.
以下の記事を参照してください.
http://blog.csdn.net/huim_lin/article/details/16959865
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