Android, 如何在 Parcelable 类中正确使用 readTypedList 方法?
2022-09-01 09:13:52
我有两个活动,在第一个活动中,我实例化了对象myObject的数组列表。在第二个活动中,我需要获取此数组列表。我找到了一个教程:http://prasanta-paul.blogspot.com/2010/06/android-parcelable-example.html 我已经实现了我的类,喜欢它的解释。
公共类 Chapitre 实现 Parcelable{
private int numero;
private String titre;
private String description;
private int nbVideo;
private ArrayList<Video> listeVideo;
public Chapitre(int numero, String titre, String description,
ArrayList<Video> 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];
}
};
}
公共类视频实现 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];
}
};
}
但是我在Chapitre类中的“source.readTypedList(listeVideo,Video.CREATOR)”行上得到了nullPointException。
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.<init>(Chapitre.java:70)
07-21 10:07:28.212: ERROR/AndroidRuntime(682): at com.genicorp.video.proto.Chapitre.<init>(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天的时间,所以如果有人可以帮助我,那就太好了,
提前致谢