Запись массивов посылок в посылку в Android
Я пытаюсь записать массив объектов, которые реализуют Parcelable в Parcel, используя writeParcelableArray.
Объекты, которые я пытаюсь написать, определены (как и следовало ожидать) как:
public class Arrival implements Parcelable {
/* All the right stuff in here... this class compiles and acts fine. */
}
И я пытаюсь записать их в "Посылку" с:
@Override
public void writeToParcel(Parcel dest, int flags) {
Arrival[] a;
/* some stuff to populate "a" */
dest.writeParcelableArray(a, 0);
}
Когда Eclipse пытается скомпилировать это, я получаю ошибку:
Несоответствие границ: универсальный метод writeParcelableArray(T[], int) типа Parcel не применим для аргументов (Arrival[], int). Предполагаемый тип Arrival не является допустимой заменой ограниченного параметра
Я полностью не понимаю это сообщение об ошибке. Parcelable
это интерфейс (не класс), поэтому вы не можете расширить его. У кого-нибудь есть идеи?
ОБНОВЛЕНИЕ: у меня в принципе та же проблема при установке ArrayList
из Parcelable
в Intent
:
Intent i = new Intent();
i.putParcelableArrayListExtra("locations", (ArrayList<Location>) locations);
выходы:
Метод putParcelableArrayListExtra (String, ArrayList Extends Parcelable>) в типе Intent не применим для аргументов (String, ArrayList
)
Это может быть потому, что Location
был класс, над которым я работал выше (который оборачивает Arrival
с) но я так не думаю.
3 ответа
Оказывается, он просто хотел, чтобы я создал массив Parcelables. Чтобы использовать пример из вопроса:
@Override
public void writeToParcel(Parcel dest, int flags) {
Parcelable[] a;
/*
some stuff to populate "a" with Arrival
objects (which implements Parcelable)
*/
dest.writeParcelableArray(a, 0);
}
На самом деле, вы можете расширить интерфейс, и похоже, что вам нужно сделать именно это. Параметр generics в writeParcelableArray запрашивает расширенный интерфейс (а не сам интерфейс). Попробуйте создать интерфейс MyParcelable, расширяет Parcelable. Затем объявите ваш массив с помощью интерфейса, но подразумевается, что ваше прибытие расширяет MyParcelable.
Я знаю, что проблема решена, но мое решение было другим, поэтому я публикую его здесь: в моем случае Eclipse автоматически импортировал неправильный пакет из-за несоответствия имен классов (некоторые из dom.Comment вместо моего класса Comment).