Pergunta

Eu estou tentando escrever um array de objetos que implementam Parcelable em um Parcel usando writeParcelableArray .

Os objetos Eu estou tentando escrever são definidos (como seria de esperar) como:

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

E eu estou tentando escrever-los em um `Parcel' com:

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

Quando Eclipse tenta compilar este eu recebo o erro:

incompatibilidade Limite: O método genérico writeParcelableArray (T [], int) de tipo Parcel não é aplicável para o argumentos (Chegada [], int). o tipo inferido de chegada não é um válido substituir o parâmetro limitada

I completamente não entender esta mensagem de erro. Parcelable é uma interface (não uma classe) para que você não pode estendê-lo. Alguém tem alguma idéia?

UPDATE: Eu estou tendo basicamente o mesmo problema quando colocar um ArrayList de Parcelables em um Intent:

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

rendimentos:

O método putParcelableArrayListExtra (String, ArrayList ) no tipo de Intenção não é aplicável para os argumentos (String, ArrayList )

Isso pode ser porque Location foi a classe que eu estava trabalhando acima (que envolve as Arrivals), mas eu não penso assim.

Foi útil?

Solução 2

Acontece que ele só me queria construir uma matriz de Parcelables. Para usar o exemplo da pergunta:

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

Outras dicas

Na verdade, você pode estender uma interface, e parece que você precisa fazer exatamente isso. O parâmetro de genéricos no writeParcelableArray está pedindo uma interface estendida (não a própria interface). Tente criar uma interface MyParcelable estende Parcelable. Em seguida, declarando sua matriz usando a interface, mas a impl deve ser sua chegada estende MyParcelable.

Eu sei que o problema está resolvido, mas a minha solução era outro, então eu estou postando aqui: no meu caso Eclipse importados automaticamente pacote errado, porque de classes de nomes abiguity (alguns dom.Comment vez de minha classe comentário)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top