Sujiz
Sujiz

Reputation: 1740

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);

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

Upvotes: 5

Views: 8201

Answers (1)

Labeeb Panampullan
Labeeb Panampullan

Reputation: 34833

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);
    }

Upvotes: 12

Related Questions