Вопрос

Я пытаюсь написать массив объектов, реализующих посылки в Посылка с использованием записьParcelableArray.

Объекты, которые я пытаюсь написать, определяются (как и следовало ожидать) как:

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) посылки типа не применим к аргументам (прибытие [], int).Выводящий тип. Прибытие не является допустимым заменой ограниченного параметра <T Extends Parcelable>

Я совершенно не понимаю этого сообщения об ошибке. Parcelable это интерфейс (а не класс), поэтому вы не можете его расширить.У кого-нибудь есть идеи?

ОБНОВЛЯТЬ: У меня практически такая же проблема при установке ArrayList из Parcelableэто в Intent:

Intent i = new Intent();
i.putParcelableArrayListExtra("locations", (ArrayList<Location>) locations);

дает:

Метод putParcelableArrayListExtra(String, ArrayList<?расширяет Parcelable >) в типе Intent неприменимо для аргументов (String, ArrayList< Location >)

Это может быть потому, что Location был класс, над которым я работал выше (который оборачивает Arrivalс), но я так не думаю.

Это было полезно?

Решение 2

Оказывается, он просто хотел, чтобы я создал массив 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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top