2012-02-23 18 views
10

La mayor parte de mi Parcelable funciona; Las cosas simples como out.writeString, out.writeInt, in.readString() etc están funcionando perfectamente.Lista <String> readStringArray en Parcelable

Mi problema es cuando quiero Parcel an Array/List/ArrayList (los he probado todos).

Actualmente estoy tratando con:

List<String> 

y

out.writeStringList() 

funciona bien.

Eclipse sugiere que hay una

in.readStringList(List<String> list) 

para leer los datos de nuevo. Pero no lo está haciendo por mí.

¿Qué se supone que debemos poner en()?

No he intentado nada, con el resultado 'Añadir argumento para hacer coincidir ...' He intentado nulo, referencia al getter entre otros; que todos devuelven el error 'no se puede convertir de vacío a la lista'

No encuentro nada en Android Developer sobre esto.

¿Alguien puede ayudar?

Gracias

de Dave

Respuesta

19

'no se puede convertir de vacío a la lista'

Desde que el error parece que usted está tratando de asignar el tipo de retorno del método readStringList(...) a una variable List<T>. En otras palabras: ¿quizás escriba algo como:

List<String> stringList = in.readStringList(stringList) 

? readStringList(...) devuelve un vacío, por lo que Eclipse puede quejarse de eso. En realidad, debe no intentar obtener un tipo de devolución a partir de un método nulo; en este caso, debe proporcionar la variable a la que se debe asignar el resultado como parámetro. Por lo tanto, esto debería ser suficiente:

List<String> stringList = null; 
in.readStringList(stringList) 

Por cierto, si se va a implementar parcelable con el fin de ser capaz de pasar los objetos de datos relativamente simples entre las actividades (utilizando Intentos), considere el uso de la interfaz Serializable en lugar - es Le ahorrará toneladas de trabajo, especialmente si necesita repetir el mismo proceso para múltiples objetos.

+0

Eso es todo, gracias. A diferencia de String o Integer, donde escribiría x = in.readString(), lo cambiará para que esté dentro.readStringList (x) - donde x es la Lista creada anteriormente . Sé que Parcelable es más trabajo de configuración, pero por lo que he leído al respecto, su rendimiento supera al de Serializable. Gracias de nuevo. – DaveSav

+0

LIMPIEZA DE LA CASA: Estaba funcionando, luego 'limpié mi código' y se detuvo. Si también estás perplejo; la respuesta, con el código, está en http://idlesun.wordpress.com/2011/07/15/android-parcelable-example-2-sub-object-and-list/ – DaveSav

+0

+1 Agradable ... Me estaba enfrentando el mismo problema –

13

Comentario a la parcela:

out.writeStringList(yourStringList); 

Leer de paquetería

List<String> newList = in.createStringArrayList(); 
+1

Esto funcionó para mí. – Arun