Java 尝试读取地块ArrayList时出现NullPointerException<;对象>;

Java 尝试读取地块ArrayList时出现NullPointerException<;对象>;,java,android,arraylist,nullpointerexception,parcelable,Java,Android,Arraylist,Nullpointerexception,Parcelable,我有一个实现Parcelable的类消息。它部分包含一个ArrayList,AttachmentsData也是我的一个类。当我试图将Messageobject从我的MainActivity传递到另一个activity时,当我试图读取此ArrayList时,会得到NullPointerException。 AttachmentsData还实现了可包裹 错误: 致命异常:main java.lang.RuntimeException:无法启动 活动 ComponentInfo{com.example

我有一个实现Parcelable的类消息。它部分包含一个ArrayList,AttachmentsData也是我的一个类。当我试图将Messageobject从我的MainActivity传递到另一个activity时,当我试图读取此ArrayList时,会得到NullPointerException。 AttachmentsData还实现了可包裹

错误:

致命异常:main java.lang.RuntimeException:无法启动 活动 ComponentInfo{com.example.incentive/com.example.incentive.Comments}: java.lang.NullPointerException 1at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967) android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) access$600(ActivityThread.java:127) android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) android.os.Handler.dispatchMessage(Handler.java:99) Looper.loop(Looper.java:137) main(ActivityThread.java:4441) java.lang.reflect.Method.Invokenactive(本机方法) java.lang.reflect.Method.invoke(Method.java:511) com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) dalvik.system.NativeStart.main(本机方法)由以下原因引起: java.lang.NullPointerException android.os.Parcel.readTypedList(Parcel.java:1638) com.example.incentive.messagemodel.Message.readFromParcel(Message.java:88) Message.com.example.incentive.messagemodel.Message.(Message.java:40) Message$1.createFromParcel(Message.java:103) Message$1.createFromParcel(Message.java:1) android.os.Parcel.readParcelable(Parcel.java:1992) android.os.Parcel.readValue(Parcel.java:1854) android.os.Parcel.readMapInternal(Parcel.java:2094) unparcel(Bundle.java:223) android.os.Bundle.getParcelable(Bundle.java:1158) com.example.incentive.Comments.onCreate(Comments.java:70) android.app.Activity.performCreate(Activity.java:4465) android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)

在编写ArrayList时的“public void writeToParcel(Parcel dest,int flags)”中:

dest.writeTypedList(attachments);
在“private void readFromParcel(Parcel in)”中,是什么导致了错误:

我尝试了不同的解决方法,并尝试了一些版本,其中之一是:

in.readList(attachments, AttachmentsData.class.getClassLoader());
但是应用程序崩溃了。。有人知道我做错了什么吗?或者更确切地说,我显然是在以一种不正确的方式编写或阅读ArrayList,但什么是正确的方式

谢谢, 克里斯蒂娜

编辑 我可能已经解决了, 我把电话换成了

attachments = in.createTypedArrayList(AttachmentsData.CREATOR);

似乎在工作!我想它可能与David Wasser的答案具有相同的效果?

在调用
readTypedList()
之前,您需要将
附件
变量设置为列表,如下所示:

attachments = new ArrayList<AttachmentsData>();
attachments=newarraylist();

可能是您刚刚在全球范围内声明了您的ArrayList()。您尚未初始化它

因此,在调用readTypedList()之前,您必须对其进行初始化

并在全球宣布为

ArrayList<AttachmentsData> attachments ;
ArrayList附件;
比如:

attachments=newarraylist();

“附件”是您的ArrayList???@Mzzl,这是不可能的。如果中的
为null,则在
readTypedList()
中不会出现异常,因为您永远无法使用该方法。NPE将被抛出到调用它的方法中。@Piyush Gupta是的,附件是我的ArrayList。很抱歉,我可能应该写这篇文章。我可以试试,但如果你在我原来的文章中查看“编辑”下的内容,这似乎也很有效。或者你认为这个解决方案会因为其他事情而在以后崩溃吗?@Phoebe你的解决方案也很好。别担心。
ArrayList<AttachmentsData> attachments ;
attachments = new ArrayList<AttachmentsData>();