使用 ArrayList 的 ArrayList 读写 Parcel
Read and write Parcel when using ArrayList of ArrayList
我也在尝试读写这个结构化的 ArrayList:ArrayList<ArrayList<Pair<Float,Float>>> points
我看到唯一的方法是在外部 ArrayList 中使用 class,但在这种情况下我没有。这是我的完整class,我该如何实现它?
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Pair;
import java.io.Serializable;
import java.util.ArrayList;
public class Cornice implements Serializable, Parcelable {
private String number;
private ArrayList<ArrayList<Pair<Float,Float>>> points;
public Cornice(String n, ArrayList<ArrayList<Pair<Float,Float>>> p) {
number = n;
if (p!=null) points = new ArrayList<>(p);
else points=new ArrayList<>();
}
protected Cornice(Parcel in) {
number = in.readString();
points = //MISSING
}
public String getNumber () {
return number;
}
public ArrayList<ArrayList<Pair<Float,Float>>> getPoints () {
return points;
}
public static final Creator<Cornice> CREATOR = new Creator<Cornice>() {
@Override
public Cornice createFromParcel(Parcel in) {
return new Cornice(in);
}
@Override
public Cornice[] newArray(int size) {
return new Cornice[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(number);
//MISSING
}
}
Pair 既不是 Parcelable,也不是 Serializable,所以你试图做的是行不通的。您将不得不更改用于保存点的数据结构。例如你可以这样转换它:
private ArrayList<ArrayList<Float[]>> points;
甚至(如果您不想支持空值)到:
private ArrayList<ArrayList<float[]>> points;
我也在尝试读写这个结构化的 ArrayList:ArrayList<ArrayList<Pair<Float,Float>>> points
我看到唯一的方法是在外部 ArrayList 中使用 class,但在这种情况下我没有。这是我的完整class,我该如何实现它?
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Pair;
import java.io.Serializable;
import java.util.ArrayList;
public class Cornice implements Serializable, Parcelable {
private String number;
private ArrayList<ArrayList<Pair<Float,Float>>> points;
public Cornice(String n, ArrayList<ArrayList<Pair<Float,Float>>> p) {
number = n;
if (p!=null) points = new ArrayList<>(p);
else points=new ArrayList<>();
}
protected Cornice(Parcel in) {
number = in.readString();
points = //MISSING
}
public String getNumber () {
return number;
}
public ArrayList<ArrayList<Pair<Float,Float>>> getPoints () {
return points;
}
public static final Creator<Cornice> CREATOR = new Creator<Cornice>() {
@Override
public Cornice createFromParcel(Parcel in) {
return new Cornice(in);
}
@Override
public Cornice[] newArray(int size) {
return new Cornice[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(number);
//MISSING
}
}
Pair 既不是 Parcelable,也不是 Serializable,所以你试图做的是行不通的。您将不得不更改用于保存点的数据结构。例如你可以这样转换它:
private ArrayList<ArrayList<Float[]>> points;
甚至(如果您不想支持空值)到:
private ArrayList<ArrayList<float[]>> points;