问题
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);
here is the code to get the data
TestSample tst = getIntent().getParcelableExtra("ONE");
if(tst != null){
Log.i("myTag", "second "+tst.toString());
}else{
Log.i("myTag","second tst is null");
}
But i get the following exception
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
回答1:
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);
}
来源:https://stackoverflow.com/questions/7930581/make-a-class-parcelable-which-contains-custom-object-list