2013-07-30 3 views
4

j'ai mis en place une classe Parcelable:Passing ArrayList <CustomObject> Activités Entre

public class Evento implements Parcelable { 
    private int; 
    private String ; 
    private String imagen; 
    //more atts 

    //Constructors, setters and getters 

public Evento(Parcel in) { 
    this.id = in.readInt(); 
    this.titulo = in.readString(); 
    this.imagen=in.readString(); 

public void writeToParcel(Parcel dest, int flags) {  
    dest.writeInt(id); 
    dest.writeString(titulo); 
    dest.writeString(imagen);  
} 
public static final Parcelable.Creator<Evento> CREATOR = new Parcelable.Creator<Evento>() { 
    @Override 
    public Evento createFromParcel(Parcel in) { 
     return new Evento(in); 
    } 

    @Override 
    public Evento[] newArray(int size) { 
     return new Evento[size]; 
    } 
}; 

Dans mon activité, je suis en train de passer un arrayList à un autre activitie: I'me overwriten onItemClick et i « m qui passe les informations de cette façon:

public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
      //create new activitie 
      ArrayList<Eventos> eventos = new ArrayList<Eventos>(); 
      Intent intent = new Intent(QueActivity.this, ProductosCategorias.class); 

      //Create information 
      Bundle informacion= new Bundle(); 
      informacion.putParcelableArrayList("eventos", eventos); 
      intent.putExtras(informacion); 

et recevoir dans l'autre activité:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_productos_categorias);  
    lv = (ListView) findViewById(R.id.listaCategoriaElegida); 
    Bundle informacionRecibida = getIntent().getExtras();    
    ArrayList<Evento> eventos =new ArrayList<Evento>(); 
    eventos= informacionRecibida.getParcelableArrayList("eventos"); 

Je reçois une exception de pointeur null. Je l'ai debugué et je reçois la valeur NULL quand j'exécute getParcelableArrayList ("eventos"), je veux dire, mon eventos arraylist est null, donc, je ne reçois aucune information.

Toute aide sera grande

+1

vous devez mettre le paquet dans l'intention. – njzk2

+0

également ce code 'informacion.putParcelableArrayList (" eventos ", ArrayList eventos);' ne compile même pas, donc je ne suppose pas que c'est le code que vous utilisez actuellement. – njzk2

+0

duplicata possible de [Comment passer l'objet d'une activité à l'autre dans Android] (http://stackoverflow.com/questions/2736389/how-to-pass-object-from-one-activity-to-another-in- android) – Sameer

Répondre

3

Ce code

Bundle informacion= new Bundle(); 
informacion.putParcelableArrayList("eventos", ArrayList<Eventos> eventos); 
intent.putExtras(informacion); 

devrait être

Bundle informacion = new Bundle(); 
ArrayList<Eventos> mas = new ArrayList<Eventos>(); 
informacion.putSerializable("eventos", mas); 
intent.putExtras(informacion); 

et Assurez-vous que votre structure Eventos comme un objet sérialisable

private class Eventos implements Serializable { 

} 

lecture Valeurs

ArrayList<Eventos> madd=getIntent().getSerializableExtra(key); 
+4

Il a posé des questions sur parcelable et vous avez répondu avec sérialisable, vous n'avez pas réellement résolu le problème avec son code mais suggéré quelque chose de complètement différent qui est beaucoup moins efficace. – TOMKA

+0

Je seconde @TOMKA. S'il vous plaît corriger votre réponse – Zen

+2

Serializable a de très mauvaises performances dans Android. Utilisez Parcelable. –

Questions connexes