Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 16/12/14, 20:56:04
Array

[xs_avatar]
fausto1124 fausto1124 no está en línea
Usuario novato en la web
 
Fecha de registro: dic 2014
Mensajes: 2
Modelo de smartphone: iphone 5s
Tu operador: Movistar
Modificacion de objetos pasados por Intent

Hola gente de HTCMania, vengo con una consulta. Yo programo en java para pc, en netbeans y ahora al programar en android estoy teniendo un problema con los objetos que paso entre activities. Yo tengo dos actividades, en la principal tengo un menu con opciones(una de esas opciones es agregar articulo, que me lleva al segundo activity), ademas en la actividad principal tengo un objeto sistema que tiene dos arraylists. El objeto sistema es serializable para poder pasarlo por el intent. Lo que hago es cuando eligo la opcion registrar articulo, paso por un intent el objeto sistema y dentro de esta nueva actividad, le agrego un objeto a uno de los arraylists. Luego si doy para atras y vuelvo al menu principal y eligo otra opcion que inicia otra actividad en la que tambien paso por intent el sistema y en esta nueva actividad muestro los toString de los objetos en uno de los arraylist del objeto sistema. El problema que tengo es que no se me agrega el articulo a el arraylist que deberia agregarse.

Mi pregunta es, como deberia pasar el objeto sistema a la otra actividad para que si lo modifico en la nueva actividad, cuando vuelva a la actividad anterior, el objeto sistema vuelva modificado?

Desde ya, muchas gracias!
Responder Con Cita


  #2  
Viejo 16/12/14, 21:24:51
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Como tu mismo has dicho los objetos que pasas por un Intent deben ser Parcelables o Serializables (si puedes hacerlo Parcelable mucho mejor, el sistema manipula los Parcelables mucho más rápido y te dará menos problemas si el objeto es muy grande). Esto quiere decir que no pasa el objeto referencia de la Activity anterior, de hecho incluso ese objeto se puede destruir si la Activity anterior decide destruirse (cosa que puede ocurrir aunque no es muy habitual salvo que la siguiente Activity necesite un huevo de memoria), sino que pasa una COPIA de ese objeto, es decir, una referencia distinta.

La solución consiste en devolver el objeto en un setResult (dentro de otro Intent) y recogerlo en el onActivityResult de la Activity anterior, puedes pasar sólo el objeto creado y añadirlo a tu ArrayList o pasar el ArrayList entero, eso ya como prefieras (yo haría lo primero)
Responder Con Cita
  #3  
Viejo 17/12/14, 16:45:42
Array

[xs_avatar]
fausto1124 fausto1124 no está en línea
Usuario novato en la web
 
Fecha de registro: dic 2014
Mensajes: 2
Modelo de smartphone: iphone 5s
Tu operador: Movistar
Muchas gracias! Eso lo solucione, ahora tengo otro problema a la hora de mandar el intent con el objeto parcelable.

Tengo esta clase parcelable:
[php]
public class Sistema implements Parcelable{

private ArrayList<Lista> listas;
private ArrayList<Articulo> articulos;

public Sistema() {
listas = new ArrayList<Lista>();
articulos = new ArrayList<Articulo>();
}

public ArrayList<Lista> getListas() {
return listas;
}

public void agregarLista(Lista lista) {
this.getListas().add(lista);
}

public ArrayList<Articulo> getArticulos(){
return this.articulos;
}

public void agregarArticulo(Articulo articulo){
this.getArticulos().add(articulo);
}

public static final Parcelable.Creator<Sistema> CREATOR =
new Parcelable.Creator<Sistema>() {
@Override
public Sistema createFromParcel(Parcel parcel) {
return new Sistema(parcel);
}

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

@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeTypedList(listas);
parcel.writeTypedList(articulos);
}

public Sistema(Parcel parcel)
{
parcel.readTypedList(listas, Lista.CREATOR);
parcel.readTypedList(articulos, Articulo.CREATOR);
}
}
[/php]En el main uso un intent para mandar un objeto sistema a una segunda actividad:

[PHP]public void addArticle(View view) {
Intent intent = new Intent(this, AgregarArticulo.class);
intent.putExtra("objectSystem", s);
this.startActivityForResult(intent, 1);
}[/PHP]Aca es donde tengo el problema, recibo el intent en la segunda actividad de esta forma:

[PHP]

Intent intento = getIntent();
s = intento.getParcelableExtra("objectSystem");[/PHP]Cuando corro el programa, me da un error nullPointerException en la linea del "getParcelableExtra" y no puedo encontrar el error.

Alguien tiene alguna idea de que puede ser?

Gracias

Última edición por fausto1124 Día 17/12/14 a las 16:54:53.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 17:12:34 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /