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);