Avisos

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 17/08/14, 18:31:31
Array

[xs_avatar]
farrop farrop no está en línea
Usuario novato en la web
 
Fecha de registro: mar 2013
Mensajes: 2
Tu operador: Movistar

Exclamation Recuperar un objeto instanciado en otro activity

Buenas a todos, soy nuevo programando para Android.
Tengo una consulta, se que en java, haciendo proyector modelo-controlador-vista, se puede hacer referencia en un controlador, a otro controlador que ya fue instanciado!
Entonces me gustaria saber si estando en un activity, instancio una clase, y cargo valores en ella, si puede acceder a esa misma clase instanciada en otro activity para obtener sus valores. Ej:

Código:
Princiapl(){
  SqlController sqlController = new SqlController();
  sqlController.setBaseDatos("Biblioteca");
  sqlController.setUser(usuario");
  sqlController.setPassword("clave");
//lamo a otro activity
                Intent intent = new Intent(Principal.this, Configuracion.class);
                Bundle b = new Bundle();
                intent.putExtras(b);
                startActivity(intent);
}

Configuracion(){
  SqlController sqlController;
  //Aca quiero recuperar el objeto que instancie el el activity anterior.
  //esto seria lo que quieor hacer pero no anda este codigo
  Principal principal = getContext().get("principal")
  sqlController = principal.sqlController;
}
NO se si es factible algo asi, o no, pero si se puede me gustaria que me orienten un poco al respecto.

Gracias

Farrop
Responder Con Cita


  #2  
Viejo 17/08/14, 19:18:32
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
Más o menos es como lo has puesto, aunque hay código que está mal, pero la idea la tienes.

Para pasar objetos entre Activities se hace mediante Bundle, aunque el propio Intent ya tiene un Bundle propio para ello, y puedes insertarle objetos mediante "intent.putExtra(nombre, objeto)". Luego en la Activity destino sería con "getIntent().getXXXExtra(nombre)", donde XXX es el tipo del objeto.

Los tipos nativos como String, Float, Int, etc tienen su propio método (getStringExtra, getFloatExtra, etc), incluso sus versiones en Array (getStringArrayExtra, getFloatArrayExtra, etc..). Ahora bien, el resto de objetos no nativos sólo puedes insertarlos en un Bundle si implementan a Serializable o Parcelable, siendo mucho más recomendable en el caso de Android usar Parcelable. Sin ir más lejos por ejemplo un Bitmap puedes pasarlo mediante un Bundle porque implementan a Parcelable.

Eso si, realmente no es la misma "instancia", porque lo que ocurre en realidad es que el objeto se vuelve a construir en la Activity destino (mediante los métodos que implementa Parcelable o Serializable).

La única forma de que una Activity tenga acceso a un objeto de otra Activity sin recurrir al Parcelable (o Serializable) es que ese objeto sea una variable de clase (es decir, que sea "static"). Pero en Android es muy muy muy poco recomendable recurrir al static para pasar parámetros.

Ahora te digo otra cosa, para el caso que has puesto de un controlador Sql lo que se debe hacer es recurrir a un patrón Singleton, de tal forma que siempre que hagas "SqlController.get()" obtengas la conexión a la base de datos.
Responder Con Cita
  #3  
Viejo 17/08/14, 20:45:23
Array

[xs_avatar]
farrop farrop no está en línea
Usuario novato en la web
 
Fecha de registro: mar 2013
Mensajes: 2
Tu operador: Movistar

Muchusimas gracias kriogeN x la pronta respuesta!
He probado con el intent.putExtra(nombre, objeto), y me ha funcionado con el Serializable, pero con el Parcelable me ha dado este error:
Parcelable protocol requires a Parcelable.Creator object called CREATOR on class android.mapa.ClaseGPS
Pero como ya lo haz dicho, no es la misma instancia, sino que se reconstruye el objeto, x lo que no me sirve para lo que quiero hacer, pues necesito modificar la instancia original desde el segundo activity. Utilidades a esto encuentro miles, pero x ahora lo que quiero hacer es:
* Tengo 3 activitis:
- En el Principal, llamo a otro activity configuraciones.
- En Configuraciones modifico unos valores y abro el tercer activity mapa.
- En mapa uso el GPS, y tengo q activarlo, y esperar aveces varios minutos para que me tome señal, y cuando tengo q cambiar alguna configuracion, debo salir del activity Mapa, se me cierra mi conexion del GPS y al volver a entrar OTRA VEZ esperar varios minutos hasta que se reconecte.

Entonces mi idea era instanciar el LocationManager en el activity principal y acceder a ese objeto desde activity_mapa para que no este buscando la conexion cada vez que ingreso a mapa, sino solo la primera vez, pero no se como hacer referencia a este objecto desde mapa, y tampoco quiero activar desde el principio el GPS xq no es la unica funcion del progama y no quiere tenerlo corriendo innecesariamente!

Si teneis alguna idea de como ayudarme os agradecere!

Farrop
Responder Con Cita
Respuesta

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



Hora actual: 09:45:12 (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 / 邮件联系 /