I generate parcelable implementation with plugin and that is the code i got.
I have a an error compilation on Metrics(Parcel in)
.
It probably because the generic array. How can i fix it?
The generic T can can contain String, Number or boolean only.
public class Metrics<T extends Parcelable> implements Parcelable {
private T[] yData;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeTypedArray(this.yData, flags);
}
public Metrics() {
}
protected Metrics(Parcel in) {
this.yData = in.createTypedArray(T.CREATOR);
}
public static final Parcelable.Creator<Metrics> CREATOR = new Parcelable.Creator<Metrics>() {
@Override
public Metrics createFromParcel(Parcel source) {
return new Metrics(source);
}
@Override
public Metrics[] newArray(int size) {
return new Metrics[size];
}
};
}
You can use a List
instead of an array :
public class Metrics<T extends Parcelable> implements Parcelable {
private List<T> yData;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
if (yData == null || yData.size() == 0)
dest.writeInt(0);
else {
dest.writeInt(yData.size());
final Class<?> objectsType = yData.get(0).getClass();
dest.writeSerializable(objectsType);
dest.writeList(yData);
}
}
public Metrics() {
}
protected Metrics(Parcel in) {
int size = in.readInt();
if (size == 0) {
yData = null;
} else {
Class<?> type = (Class<?>) in.readSerializable();
yData = new ArrayList<>(size);
in.readList(yData, type.getClassLoader());
}
}
public static final Parcelable.Creator<Metrics> CREATOR = new Parcelable.Creator<Metrics>() {
@Override
public Metrics createFromParcel(Parcel source) {
return new Metrics(source);
}
@Override
public Metrics[] newArray(int size) {
return new Metrics[size];
}
};
}