1

I looked all answers to question "Class not found when unmarshalling" in the Stackoverflow, but I don't found solution to my situation. I tried any variants but didn't work. I get following error:

enter image description here

Here my Classes:

Class one:

public class Class1 implements Parcelable, Serializable {
    private static final long serialVersionUID = -3892107077759983950L;
    private long id;
    private ArrayList<Class2> details;
    public Class1(long id, ArrayList<Class2> details) {
        this.id = id;
        this.details = details;
    }
    public Class1(Parcel in) {
        this.id = in.readLong();
        details = new ArrayList<Class2>((Collection<? extends Class2>) Arrays.asList(in.readParcelableArray(Class2.class.getClassLoader())));
//      details = (ArrayList<OrderDetail>)in.readSerializable();
//      details = in.readArrayList(Class2.class.getClassLoader());
//      in.readList(details, Class2.class.getClassLoader());
//      in.readTypedList(details, Class2.CREATOR);
    }
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeLong(id);
//      dest.writeSerializable(details);        
//      dest.writeList(details);
//      dest.writeTypedList(details);
        dest.writeParcelableArray(ordDetailListToArr(), flags);
    }
    @Override
    public int describeContents() { return 0; }
    public static final Parcelable.Creator<Class1> CREATOR
    = new Parcelable.Creator<Class1>() {
        public Class1 createFromParcel(Parcel in) {
            return new Class1(in);
        }
        public Class1[] newArray(int size) {
            return new Class1[size];
        }
    };
}

Class second:

public class Class2 implements Parcelable, Serializable {
    private static final long serialVersionUID = 3242734374178052427L;
    private long orderId;
    private Class3 Class3;
    public Class2(long orderId, Class3 Class3) {
        this.orderId = orderId;
        this.Class3 = Class3;
    }
    private Class2(Parcel in) {
        this.orderId = in.readLong();
        this.Class3 = (Class3) in.readParcelable(Class3.class.getClassLoader());
    }
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeLong(orderId);
        dest.writeParcelable(Class3, flags);
    }
    @Override
    public int describeContents() { return 0;}
    public static final Parcelable.Creator<Class2> CREATOR
    = new Parcelable.Creator<Class2>() {
        public Class2 createFromParcel(Parcel in) {
            return new Class2(in);
        }
        public Class2[] newArray(int size) {
            return new Class2[size];
        }
    };
}

Class third:

public class Class3 extends Class4 implements Cloneable, Serializable {
    private static final long serialVersionUID = 8712386538880552241L;
    private int count;
    public Class3(Class4 Class4, int count) {
        super(Class4.getId(), Class4.getName());
        this.count = count;
    }
    private Class3(Parcel in) {
        super(in);
        this.count = in.readInt();
    }
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        super.writeToParcel(dest, flags);
        dest.writeInt(count);
    }
    @Override
    public int describeContents() { return 0;}
    public static final Parcelable.Creator<Class3> CREATOR
    = new Parcelable.Creator<Class3>() {
        public Class3 createFromParcel(Parcel in) {
            return new Class3(in);
        }
        public Class3[] newArray(int size) {
            return new Class3[size];
        }
    };
}

class fourth:

public class Class4 implements Parcelable, Serializable {
    private static final long serialVersionUID = -8394588748958519736L;
    private long id;
    private String name;
        public Class4(long id, String name) {
        this.id = id;
        this.name = name;
    }
    public Class4(Parcel in) {
        this.id = in.readLong();
        this.name = in.readString();
    }
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeLong(id);
        dest.writeString(name);
    }
    @Override
    public int describeContents() { return 0;}
    public static final Parcelable.Creator<Class4> CREATOR
    = new Parcelable.Creator<Class4>() {
        public Class4 createFromParcel(Parcel in) {
            return new Class4(in);
        }
        public Class4[] newArray(int size) {
            return new Class4[size];
        }
    };  
}

I used Serializable in all classes for exchange(read/write object) data via Socket channel.

I passed data from my first activity to second activity following way:

First Activity:

Class1 class1 = ...;
Intent secondActivity = new Intent(FirstActivity.this, SecondActivity.class);
orderedProductsActivity.putExtra("mydata", (Parcelable)class1);
startActivity(secondActivity);

Second Activity:

Class1 class1 = (Class1) getIntent().getParcelableExtra("mydata");
SBotirov
  • 13,872
  • 7
  • 59
  • 81

1 Answers1

0

I had this issue in the past, in my case it was related with ArrayList, can you try to do:

array = (ArrayList<Long>) in.readSerializable();

and

dest.writeSerializable(array);

instead of using writeParcelableArray

Guillermo Merino
  • 3,197
  • 2
  • 17
  • 34
  • If I use this code appear "Caused by: java.lang.NullPointerException java.io.ByteArrayInputStream.(ByteArrayInputStream.java:60) android.os.Parcel.readSerializable(Parcel.java:2210)" error – SBotirov Mar 28 '14 at 10:13
  • If I use only serializable and remove all parcelable implementations in my classes, all the problems disappears – SBotirov Mar 28 '14 at 10:19
  • check your class4, you write 2 fields to the Parcel but you read 7, so it is going to crash. Just for testing can you use some other class like string, integer or long as the contents of your arraylist to check if it works? – Guillermo Merino Mar 28 '14 at 10:23
  • Thanks @Guillermo Merino I did mistake when write question I edited my question – SBotirov Mar 28 '14 at 10:27
  • Can your test your parceling array method with an arraylist of Strings, Longs, Integers, etc? just to be sure of that part works – Guillermo Merino Mar 28 '14 at 10:34
  • I'm sure the rest of parts codes works, I tested my other codes without field "ArrayList details", they works perfectly – SBotirov Mar 28 '14 at 10:44