使一个可包裹的类包含自定义对象列表 [英] Make a class parcelable which contains Custom object list
本文介绍了使一个可包裹的类包含自定义对象列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
使列表对象可解析时出现错误(我认为读取对象时发生错误)这是我的代码
I am getting error while making a list object parsable(i think the error occured while reading the object) here is my code
public class TestSample implements Parcelable {
int intValue;
String stirngValue;
private List<DocumentControlPolicy> cpls;
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(intValue);
dest.writeString(stirngValue);
dest.writeTypedList(cpls);
dest.writeList(cpls);
}
public static final Parcelable.Creator<TestSample> CREATOR
= new Parcelable.Creator<TestSample>() {
public TestSample createFromParcel(Parcel in) {
return new TestSample(in);
}
public TestSample[] newArray(int size) {
return new TestSample[size];
}
};
private TestSample(Parcel in) {
intValue = in.readInt();
stirngValue=in.readString();
in.readTypedList(cpls,DocumentControlPolicy.CREATOR);
}
public TestSample(int intValue, String stirngValue) {
super();
this.intValue = intValue;
this.stirngValue = stirngValue;
}
}
这是将数据从一个活动发送到另一活动的代码
And here is the code to send the data from one activity to other
Intent nextpage = new Intent(this, Secondpage.class);
TestSample tst= new TestSample(1,"Tood");
Log.i("myTag", tst.toString());
nextpage.putExtra("ONE", tst);
startActivity(nextpage);
这是获取数据的代码
TestSample tst = getIntent().getParcelableExtra("ONE");
if(tst != null){
Log.i("myTag", "second "+tst.toString());
}else{
Log.i("myTag","second tst is null");
}
但是我收到以下异常
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): FATAL EXCEPTION: main
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.parceblecheck/com.app.parceblecheck.Secondpage}: java.lang.NullPointerException
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at android.os.Handler.dispatchMessage(Handler.java:99)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at android.os.Looper.loop(Looper.java:123)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at android.app.ActivityThread.main(ActivityThread.java:4627)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at java.lang.reflect.Method.invokeNative(Native Method)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at java.lang.reflect.Method.invoke(Method.java:521)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at dalvik.system.NativeStart.main(Native Method)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): Caused by: java.lang.NullPointerException
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at android.os.Parcel.readTypedList(Parcel.java:1555)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at com.zenprise.android.policy.TestSample.<init>(TestSample.java:41)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at com.zenprise.android.policy.TestSample.<init>(TestSample.java:38)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at com.zenprise.android.policy.TestSample$1.createFromParcel(TestSample.java:30)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at com.zenprise.android.policy.TestSample$1.createFromParcel(TestSample.java:1)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at android.os.Parcel.readParcelable(Parcel.java:1906)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at android.os.Parcel.readValue(Parcel.java:1771)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at android.os.Parcel.readMapInternal(Parcel.java:2008)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at android.os.Bundle.unparcel(Bundle.java:208)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at android.os.Bundle.getParcelable(Bundle.java:1100)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at android.content.Intent.getParcelableExtra(Intent.java:3396)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at com.app.parceblecheck.Secondpage.onCreate(Secondpage.java:27)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
10-28 19:30:58.281: ERROR/AndroidRuntime(3371): ... 11 more
推荐答案
在使用对象 cpls
之前,您还没有创建对象
在您的 TestSample(Parcel in)
构造函数中,您正在使用 cpls
而不声明它.您应该这样做
You have not created the object cpls
before you use it
In your TestSample(Parcel in)
constructor, you are using cpls
without declaring it..
You should do like this
private TestSample(Parcel in) {
intValue = in.readInt();
stirngValue=in.readString();
cpls = new ArrayList<DocumentControlPolicy>();//The code you missed..
in.readTypedList(cpls,DocumentControlPolicy.CREATOR);
}
这篇关于使一个可包裹的类包含自定义对象列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文