如何在 Android 中使用 Parcelable 读取 List<List<List<Double>>
How to read List<List<List<Double>> using Parcelable in Android
在 GET 中检索信息时,我得到了正确的响应。现在,我正在尝试使用 Post 调用将一些数据发送回服务器。但是当我这样做时,我得到 classCastException
这是模型class
public class Polygon implements Parcelable
{
@SerializedName("type")
@Expose
private String type;
@SerializedName("coordinates")
@Expose
private List<List<List<Double>>> coordinates = new ArrayList<>();
public final static Creator<Polygon> CREATOR = new Creator<Polygon>() {
@SuppressWarnings({
"unchecked"
})
public Polygon createFromParcel(android.os.Parcel in) {
return new Polygon(in);
}
public Polygon[] newArray(int size) {
return (new Polygon[size]);
}
};
protected Polygon(android.os.Parcel in) {
this.type = ((String) in.readValue((String.class.getClassLoader())));
in.readList(this.coordinates, (List.class.getClassLoader()));
}
public Polygon() {
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public List<List<List<Double>>> getCoordinates() {
return coordinates;
}
public void setCoordinates(List<List<List<Double>>> coordinates) {
this.coordinates = coordinates;
}
public void writeToParcel(android.os.Parcel dest, int flags) {
dest.writeValue(type);
dest.writeList(coordinates);
}
public int describeContents() {
return 0;
}
}
这是 json 我正在尝试检索并稍后发回。
{"polygon": {
"type": "Polygon",
"coordinates": [
[
[
-105.18367,
39.54363
],
[
-105.18367,
39.98435
],
[
-104.33773,
39.98435
],
[
-104.33773,
39.54363
],
[
-105.18367,
39.54363
]
]
]
}
}
为此我得到 java.lang.ClassCastException: java.lang.Double cannot be cast to java.util.Collection
。
我尝试将其转换为单独的 class 以将其用作 CREATOR
但随后 GET 调用失败。
任何帮助都会很棒!
您可能需要实施专门化 ArrayList
,即 Parcelable
才能正常工作。 How to implement Parcelable for a class containing List<List<String>>? 这里接受的答案很好,但您可能想使用泛型,因此它不仅可以用于 String
或您的实例 Double
作为旁注,您可能想研究一个单层解决方案来协调类似这样的事情。
public class Coordinates implements Parcelable{
public double x;
public double y;
public double z;
// You get the gist
}
List<Coordinates> coordinates = new ArrayList<>();
如果你能做到这一点,你就可以完全避免上述问题。同样,我对您的设置一无所知,我可能完全错了但是嵌套 List
并不是世界上最漂亮的东西。
在 GET 中检索信息时,我得到了正确的响应。现在,我正在尝试使用 Post 调用将一些数据发送回服务器。但是当我这样做时,我得到 classCastException
这是模型class
public class Polygon implements Parcelable
{
@SerializedName("type")
@Expose
private String type;
@SerializedName("coordinates")
@Expose
private List<List<List<Double>>> coordinates = new ArrayList<>();
public final static Creator<Polygon> CREATOR = new Creator<Polygon>() {
@SuppressWarnings({
"unchecked"
})
public Polygon createFromParcel(android.os.Parcel in) {
return new Polygon(in);
}
public Polygon[] newArray(int size) {
return (new Polygon[size]);
}
};
protected Polygon(android.os.Parcel in) {
this.type = ((String) in.readValue((String.class.getClassLoader())));
in.readList(this.coordinates, (List.class.getClassLoader()));
}
public Polygon() {
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public List<List<List<Double>>> getCoordinates() {
return coordinates;
}
public void setCoordinates(List<List<List<Double>>> coordinates) {
this.coordinates = coordinates;
}
public void writeToParcel(android.os.Parcel dest, int flags) {
dest.writeValue(type);
dest.writeList(coordinates);
}
public int describeContents() {
return 0;
}
}
这是 json 我正在尝试检索并稍后发回。
{"polygon": {
"type": "Polygon",
"coordinates": [
[
[
-105.18367,
39.54363
],
[
-105.18367,
39.98435
],
[
-104.33773,
39.98435
],
[
-104.33773,
39.54363
],
[
-105.18367,
39.54363
]
]
]
}
}
为此我得到 java.lang.ClassCastException: java.lang.Double cannot be cast to java.util.Collection
。
我尝试将其转换为单独的 class 以将其用作 CREATOR
但随后 GET 调用失败。
任何帮助都会很棒!
您可能需要实施专门化 ArrayList
,即 Parcelable
才能正常工作。 How to implement Parcelable for a class containing List<List<String>>? 这里接受的答案很好,但您可能想使用泛型,因此它不仅可以用于 String
或您的实例 Double
作为旁注,您可能想研究一个单层解决方案来协调类似这样的事情。
public class Coordinates implements Parcelable{
public double x;
public double y;
public double z;
// You get the gist
}
List<Coordinates> coordinates = new ArrayList<>();
如果你能做到这一点,你就可以完全避免上述问题。同样,我对您的设置一无所知,我可能完全错了但是嵌套 List
并不是世界上最漂亮的东西。