Запись массивов Parcelables в посылку в Android
Я пытаюсь написать массив объектов, которые реализуют Parcelable на участка используя 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) типа Посылка не применяется для аргументы (Arrival [], int). Этот выводимый тип прибытия не является допустимым заменить ограниченный параметр
я совершенно не понимаю это сообщение об ошибке. Parcelable
- это интерфейс (а не класс), поэтому вы не можете его расширить. У кого-нибудь есть идеи?
обновление: у меня в основном такая же проблема при установке ArrayList
of Parcelable
s в Intent
:
Intent i = new Intent();
i.putParcelableArrayListExtra("locations", (ArrayList<Location>) locations);
выходы:
метод putParcelableArrayListExtra (String, ArrayList) в типе Intent неприменим для Аргументов (String, ArrayList)
это может быть потому что Location
был класс, над которым я работал выше (это обертывает Arrival
s), но я так не думаю.
3 ответов
на самом деле, можно расширить интерфейс, и, похоже, что вам нужно сделать именно это. Параметр generics в writeParcelableArray запрашивает расширенный интерфейс (а не сам интерфейс). Попробуйте создать интерфейс MyParcelable расширяет Parcelable. Затем объявление вашего массива с помощью интерфейса, но impl должен быть вашим прибытием расширяет MyParcelable.
оказывается, он просто хотел, чтобы я построил массив 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);
}
Я знаю, что проблема решена, но мое решение было другим, поэтому я размещаю его здесь: в моем случае Eclipse автоматически импортировал неправильный пакет из-за неоднозначности имен классов(некоторые dom.Комментарий вместо моего класса комментариев).