java parcelable list_java – Android,如何在Parcelable类中正确使用readTypedList方法?

我有两个活动,在第一个,我建立一个ArrayList的对象myObject。在第二个活动,我需要得到这个Arraylist。我找到了一个教程:

http://prasanta-paul.blogspot.com/2010/06/android-parcelable-example.html

我已经实现我的类喜欢它的解释。

public class Chapitre实现Parcelable {

private int numero;

private String titre;

private String description;

private int nbVideo;

private ArrayList listeVideo;

public Chapitre(int numero, String titre, String description,

ArrayList listeVideo) {

this.numero = numero;

this.titre = titre;

this.description = description;

this.listeVideo = listeVideo;

this.nbVideo = listeVideo.size();

}

//Getters and Setters ...

private Chapitre(Parcel source) {

numero = source.readInt();

titre = source.readString();

description = source.readString();

nbVideo = source.readInt();

source.readTypedList(listeVideo, Video.CREATOR);

}

@Override

public int describeContents() {

return 0;

}

@Override

public void writeToParcel(Parcel dest, int flags) {

dest.writeInt(numero);

dest.writeString(titre);

dest.writeString(description);

dest.writeInt(nbVideo);

dest.writeTypedList(listeVideo);

}

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {

public Chapitre createFromParcel(Parcel in) {

return new Chapitre(in);

}

public Chapitre[] newArray(int size) {

return new Chapitre[size];

}

};

}}

public class Video implements Parcelable {

private String titre;

private int numero;

private String url;

private String description;

private String imageUrl;

private Bitmap image;

private String duree;

/**

*

* @param nom

* @param numero

* @param url

* @param description

*/

public Video(String titre, String url, String description) {

super();

this.titre = titre;

this.url = url;

this.description = description;

}

public Video(int numero, String titre, String url, String description) {

super();

this.titre = titre;

this.url = url;

this.description = description;

this.numero = numero;

}

public Video(String titre,int numero, String url, String description, String imageUrl) {

super();

this.titre = titre;

this.url = url;

this.description = description;

this.imageUrl = imageUrl;

this.numero = numero;

setImage(fetchImage(imageUrl));

}

//Getters and Setters ...

@Override

public int describeContents() {

// TODO Auto-generated method stub

return 0;

}

@Override

public void writeToParcel(Parcel dest, int flags) {

dest.writeString(titre);

dest.writeInt(numero);

dest.writeString(url);

dest.writeString(description);

dest.writeString(imageUrl);

dest.writeString(duree);

}

public Video(Parcel source){

/*

* Reconstruct from the Parcel

*/

Log.v("TAG", "ParcelData(Parcel source): time to put back parcel data");

titre = source.readString();

numero = source.readInt();

url = source.readString();

description = source.readString();

imageUrl = source.readString();

duree = source.readString();

}

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {

public Video createFromParcel(Parcel in) {

return new Video(in);

}

public Video[] newArray(int size) {

return new Video[size];

}

};

}}

但我得到nullPointException行“source.readTypedList(listeVideo,Video.CREATOR);”在类Chapitre。

07-21 10:07:28.212: ERROR/AndroidRuntime(682): FATAL EXCEPTION: main

07-21 10:07:28.212: ERROR/AndroidRuntime(682): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.genicorp.video.proto/com.genicorp.video.proto.Lecture}: java.lang.NullPointerException

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.app.ActivityThread.access$1500(ActivityThread.java:123)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.os.Handler.dispatchMessage(Handler.java:99)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.os.Looper.loop(Looper.java:126)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.app.ActivityThread.main(ActivityThread.java:3997)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at java.lang.reflect.Method.invokeNative(Native Method)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at java.lang.reflect.Method.invoke(Method.java:491)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at dalvik.system.NativeStart.main(Native Method)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): Caused by: java.lang.NullPointerException

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.os.Parcel.readTypedList(Parcel.java:1630)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at com.genicorp.video.proto.Chapitre.(Chapitre.java:70)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at com.genicorp.video.proto.Chapitre.(Chapitre.java:65)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at com.genicorp.video.proto.Chapitre$1.createFromParcel(Chapitre.java:89)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at com.genicorp.video.proto.Chapitre$1.createFromParcel(Chapitre.java:1)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.os.Parcel.readParcelable(Parcel.java:1981)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.os.Parcel.readValue(Parcel.java:1846)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.os.Parcel.readListInternal(Parcel.java:2092)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.os.Parcel.readArrayList(Parcel.java:1536)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.os.Parcel.readValue(Parcel.java:1867)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.os.Parcel.readMapInternal(Parcel.java:2083)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.os.Bundle.unparcel(Bundle.java:215)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.os.Bundle.getParcelableArrayList(Bundle.java:1151)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.content.Intent.getParcelableArrayListExtra(Intent.java:3634)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at com.genicorp.video.proto.Lecture.onCreate(Lecture.java:37)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)

07-21 10:07:28.212: ERROR/AndroidRuntime(682): ... 11 more

我已经浪费了1天在这,所以如果有人可以帮助我,这将是巨大的,

提前致谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在 Android 中遇到 "Parcelable encountered IOException writing serializable object" 错误时,这通常是由于递的对象没有正确实现 `Parcelable` 接口而导致的。要解决这个问题,您可以尝试以下几种方法: 1. 实现 Parcelable 接口:确保要传递的对象正确地实现了 Parcelable 接口。Parcelable 接口提供了一种序列化和反序列化对象的方式,以便在 Android 组件之间进行传递。您可以按照以下步骤实现 Parcelable 接口: - 在要传递的对象类中实现 Parcelable 接口。 - 实现 `writeToParcel(Parcel dest, int flags)` 方法,将对象的属性写入 Parcel 对象。 - 实现 `describeContents()` 方法,返回 0。 - 添加一个名为 `CREATOR` 的 `Parcelable.Creator` 对象,并实现 `createFromParcel(Parcel source)` 和 `newArray(int size)` 方法。 2. 序列化对象:如果您不需要使用 Parcelable 接口,而是希望使用 Java 的序列化机制,您可以确保要传递的对象正确地实现了 Serializable 接口。Serializable 接口提供了一种将对象序列化为字节流的机制,以便在 Java 中进行传递。请确保要传递的对象及其所有嵌套对象都实现了 Serializable 接口。 3. 检查对象中的属性:当一个对象实现了 Parcelable 或 Serializable 接口时,其所有嵌套属性也必须是可序列化的。请确保对象中的所有属性都实现了 Parcelable 或 Serializable 接口。 4. 避免传递大型对象:尽量避免传递大型对象,特别是 Bitmap 等占用大量内存的对象。如果传递大型对象是必需的,可以考虑其他方式,如使用文件或数据库进行传递。 通过以上方法,您应该能够解决 "Parcelable encountered IOException writing serializable object" 错误。如果问题仍然存在,请检查错误日志以获取更详细的信息,并在需要时提供相关代码以便更好地帮助您解决问题。如有任何疑问,请随时向我提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值