Android 无法将java.util.Arrays$ArrayList转换为Parcelable对象中的java.util.ArrayList
我写了以下课程:Android 无法将java.util.Arrays$ArrayList转换为Parcelable对象中的java.util.ArrayList,android,arrays,list,arraylist,parcelable,Android,Arrays,List,Arraylist,Parcelable,我写了以下课程: public class Company implements Parcelable { private int uid; @SerializedName("field_user_org_name_value") private String name; @SerializedName("field_user_org_address_value") private String address; @SerializedName("field_user_org_category
public class Company implements Parcelable {
private int uid;
@SerializedName("field_user_org_name_value")
private String name;
@SerializedName("field_user_org_address_value")
private String address;
@SerializedName("field_user_org_category_tid")
private int category;
@SerializedName("field_user_org_town_tid")
private int cityId;
@SerializedName("image")
private String imageUrl;
private int online;
@SerializedName("field_user_org_description_value")
private String description;
@SerializedName("field_user_org_phone_value")
private String mobPhone;
@SerializedName("field_user_org_stac_phone_value")
private String phone;
public ArrayList<Queue> getQueues() {
return queues;
}
@SerializedName("value_array")
private ArrayList<Queue> queues;
double lat;
double lng = 0;
double distance;
public double getDistance() {
return distance;
}
public void setDistance(double distance) {
this.distance = distance;
}
public double getLng() {
return lng;
}
public void setLng(double lng) {
this.lng = lng;
}
public double getLat() {
return lat;
}
public void setLat(double lat) {
this.lat = lat;
}
public String getDescription() {
return description;
}
public String getMobPhone() {
return mobPhone;
}
public String getPhone() {
return phone;
}
public int getOnline() {
return online;
}
public Company(Parcel in) {
uid = in.readInt();
name = in.readString();
address = in.readString();
category = in.readInt();
cityId = in.readInt();
imageUrl = in.readString();
online = in.readInt();
description = in.readString();
mobPhone = in.readString();
phone = in.readString();
lat = in.readDouble();
lng = in.readDouble();
distance = in.readDouble();
Parcelable[] parcelableArray = in.readParcelableArray(Queues.class.getClassLoader());
Queue[] resultArray = null;
if (parcelableArray != null) {
resultArray = Arrays.copyOf(parcelableArray, parcelableArray.length, Queue[].class);
}
queues =(ArrayList) Arrays.asList(resultArray);
}
public int getUid() {
return uid;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
public int getCategory() {
return category;
}
public int getCityId() {
return cityId;
}
public String getImageUrl() {
return imageUrl;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(uid);
dest.writeString(name);
dest.writeString(address);
dest.writeInt(category);
dest.writeInt(cityId);
dest.writeString(imageUrl);
dest.writeInt(online);
dest.writeString(description);
dest.writeString(mobPhone);
dest.writeString(phone);
dest.writeDouble(lat);
dest.writeDouble(lng);
dest.writeDouble(distance);
Queue[] queueArray = new Queue[queues.size()];
dest.writeParcelableArray(queues.toArray(queueArray), 0);
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
@Override
public Object createFromParcel(Parcel source) {
return new Company(source);
}
@Override
public Object[] newArray(int size) {
return new Company[size];
}
};
public static class CustomComparator implements Comparator<Company> {
@Override
public int compare(Company o1, Company o2) {
return o1.getName().compareTo(o2.getName());
}
}
public static class CustomComparatorDistance implements Comparator<Company> {
@Override
public int compare(Company o1, Company o2) {
return Double.compare(o1.getDistance(), o2.getDistance());
}
}
public static class Queue implements Parcelable {
public int getCondition() {
return condition;
}
public String getTime() {
return time;
}
/**
* 0 - Free
* 1 - Busy
* 2 - Not working
*/
@SerializedName("sel")
int condition;
String time;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(condition);
dest.writeString(time);
}
public Queue(Parcel in) {
condition = in.readInt();
time = in.readString();
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Object createFromParcel(Parcel in) {
return new Queue(in);
}
public Object[] newArray(int size) {
return new Queue[size];
}
};
}
}
您需要将字段的类型
队列
更改为列表
,而不是数组列表
。你也需要改变
queues = (ArrayList) Arrays.asList(resultArray);
到
queues=(List)数组.asList(resultArray);
它失败的原因是Arrays.asList()
返回一个List
,但不一定是ArrayList
。您不知道将返回的确切类型,因此您应该直接转换到列表中
但是List
是泛型类型,因此您应该包含type参数,并将其强制转换为List
,而不仅仅是List
。(如果只使用List
,将收到编译器警告)
顺便说一句,通常避免使用标准JDK类(如Queue
)也使用的类名是一个好主意。这会让任何阅读您的代码的人感到困惑,并使您更有可能在某个时候意外地使用错误的导入
。队列
不是可打包的
。公共静态类队列实现了您自己的一个类ParcelableIs队列
?不是java.util.Queue
?是的,请看我的代码,错过了底层类。或者是queues=newarraylist(Arrays.asList(resultArray))
@kcopock可以,但除非你真的需要它成为ArrayList
,否则这只会减慢速度。同意!:)只是一个选择。
queues =(ArrayList) Arrays.asList(resultArray);
queues = (ArrayList) Arrays.asList(resultArray);
queues = (List<Queue>) Arrays.asList(resultArray);