2009-12-11 2 views
6

Я пытаюсь написать массив объектов, которые реализуют Parcelable в Parcel, используя writeParcelableArray.Написание массивов Parcelables на парцеллу в Android

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

public class Arrival implements Parcelable { 
    /* All the right stuff in here... this class compiles and acts fine. */ 
} 

И я пытаюсь записать их в `Parcel» с:

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    Arrival[] a; 
    /* some stuff to populate "a" */ 
    dest.writeParcelableArray(a, 0); 
} 

Когда Eclipse, пытается скомпилировать это я получаю сообщение об ошибке:

Bound mismatch: The generic method writeParcelableArray(T[], int) of type Parcel is not applicable for the arguments (Arrival[], int). The inferred type Arrival is not a valid substitute for the bounded parameter < T extends Parcelable >

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

UPDATE: У меня в основном с той же проблемой, когда положить ArrayList из Parcelable с в Intent:

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

выходы:

The method putParcelableArrayListExtra(String, ArrayList< ? extends Parcelable >) in the type Intent is not applicable for the arguments (String, ArrayList< Location >)

Это может быть потому, что Location был класс I работал над этим (это обертывает 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); 
} 
+0

Как я уже сказал, объявите массив, используя интерфейс. Рад, что вы все разобрались. – harschware

3

На самом деле вы можете расширить интерфейс, и похоже, что вам нужно сделать именно это. Параметр generics в writeParcelableArray запрашивает расширенный интерфейс (а не сам интерфейс). Попробуйте создать интерфейс MyParcelable расширяет Parcelable. Затем объявляя ваш массив с помощью интерфейса, но имплант должен быть вашим Прибытием расширяет MyParcelable.

0

Я знаю, что проблема решена, но мое решение было другое, так что я отправляю его здесь: в моем случае Eclipse, автоматически импортированы неправильный пакет из классов имен abiguity (некоторые йот .Comment вместо моего класса Comment).

Смежные вопросы