|
||
|
|
|
|||||||
| 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 |
![]() |
|
|
Herramientas |
|
#1
|
||||
|
||||
|
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! |
|
|
|
#2
|
||||
|
||||
|
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) |
|
#3
|
||||
|
||||
|
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. |
![]() |
Estás aquí
|
||||||
|
||||||