Saltar al contenido

Intent – Pasar datos entre Activities – App Android (Video)

Aprende a pasar datos entre Activities en Android con Eclipse: un Intent en el OnClickListener del botón y nombre y apellido en el segundo Activity.

En este tutorial se va a mostrar el IDE de eclipse para realizar una App en Android y como pasar datos de un activity a otro tras un evento o dicho de otra forma, como pasar datos de una pantalla a otra tras pulsar un botón. Para realizar este tutorial se necesitará tener y saber lo siguiente:

  1. Se ha de tener instalado el IDE "Eclipse" y tenerlo vinculado con el SDK de Android. Para los que no tengáis hecho esto lo podéis hacer siguiendo el siguiente tutorial:(Instalar el SDK de Android y vincularlo con Eclipse)
  2. Se ha de tener el Eclipse configurado correctamente. En este caso solo se necesitará tener configurado el emulador del móvil aunque también es conveniente tener configurada la consola de salida de datos llamada «LogCat» para poder realizar trazas en el desarrollo de la App. Para los que no tengáis configurado el Eclipse, podéis ver cómo se hace en el siguiente tutorial:(Preparar las herramientas necesarias para programar en Android)
  3. Por último, aunque no es necesario pero si recomendable, debéis de mirar el siguiente tutorial (Activity – entender y usar una Actividad) para entender el ciclo de vida de un activity. No es necesario que lo miréis para realizar este tutorial y quizás si sois «noveles» en el desarrollo de Apps os cueste entenderlo a la primera , pero si que es muy recomendable para que posteriormente entendáis muchas cosas en el desarrollo de Apps.

Es objetivo de este tutorial (a parte de mostrar el IDE y los archivos que hay en un proyecto) se pretende hacer la siguiente app, que consiste en recoger unos datos del primer activity y mostrarlos en el segundo, tal y como se muestra en la siguiente imagen:

EsquemaApp_jarroba.com

Una vez vista la funcionalidad que ha de tener esta app, mostramos el video de como realizar esta App desde Cero:

El proyecto realizado en este Video-Tutorial, lo podeis descargar pulsando AQUI.

Como se ha visto en este tutorial (A parte de crear las interfaces que lleva bastante tiempo), la clave para pasar los datos de un activity a otro, es crearse un "Intent" para pasar los datos de un activity a otro. Este Intent se ha declarado dentro del código que define el evento que se ha de realizar tras pulsar el botón; es decir en el "OnClickListener". La parte del código donde se describe esta acción y se declara el Intent es el siguiente:


miBoton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent i = new Intent (PrimerActivity.this, SegundoActivity.class);
				i.putExtra("nombre", campoNombre.getText()+"");
				i.putExtra("apellido", campoApellidos.getText()+"");
				startActivity(i);
			}
		});

Como se observa, en el intent "se declaran" dos "variable", 'nombre' y 'apellido' (lo pongo entre comillas dobles porque en realidad no es así, pero lo digo de esta forma para que se entienda) que se pasan al segundo activity (Intent i = new Intent (PrimerActivity.this, SegundoActivity.class)) tras ejecutarse el método "startActivity(i)".

Cuando el "Intent" 'i' llega al segundo activity, hay que asignar los datos que hay en el activity a alguna variable o elemento del segundo activity. Es recomendable, aunque no necesario que se asigne lo que se obtiene de un Intent a variables para que sea el código mas "legible y entendible". Recogemos los datos en el segundo activity de la siguiente forma:


		String nombre = getIntent().getStringExtra("nombre");
		String apellidos = getIntent().getStringExtra("apellido");

Después de recoger los datos los mostramos en la pantalla en los TextView correspondientes.

Esto ha sido todo, esperamos que este tutorial os sirva de ayuda 😉

«Intent – Pasar datos entre Activities – App Android (Video)», de Ricardo Moya en jarroba.com, con licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0. Obra registrada en Safe Creative.

Ricardo Moya

Me dedico profesionalmente al Machine Learning y al Big Data. Me gusta aprender tecnologías nuevas y explicarlas de la mejor manera posible en esta web.

Te puede interesar

Activity – entender y usar una Actividad

Qué es una Activity de Android, cómo es su ciclo de vida y cómo abrir una actividad desde otra con un Intent y el AndroidManifest, con un ejemplo completo.

4 Nov 2012

Comentarios (48)

  1. guadalupe

    que tal si yo quiero que si yo no le mando nada me muestre el ultimo valor que le envie

    1. Ramón Invarato Jarroba.com

      Puedes guardar en alguna memoria intermedia el último valor que le enviaste para mostrarlo si detectas que no le envías nada en el Intent.

  2. Escannor

    Saludos estoy llevando el curso de android y se me pidio hacer una explicacion de 3  que son:  Definición comportamiento de Actividades,
       Transferencia de datos entre actividades ,   Registro de Actividades.Si me pudieran pasar una pagina para poder estudiar y practicar pls.Gracias.
     

    1. Ramón Invarato Jarroba.com

      Tienes bastante información en nuestro libro gratuito de Android en https://jarroba.com/libro-android-100-gratis/

  3. Leonel

    Buenas noches a todos le comento lo siguiente: estoy realizando una app y lo que quiero es que al momento de seleccionar una opción de mi spinner me cambie a otro activity pero no lo quiere hacer como que se cicla ya que lo estoy haciendo con if le dejo el código espero me puedan apoyar

    sp_calculo_cementacion = (Spinner) findViewById(R.id.sp_calculo_cementacion);

    sp_calculo_cementacion.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

    public void onItemSelected(AdapterView adapterView, View view, int i, long l) {

    int texto;

    String selec = (String) (sp_calculo_cementacion.getSelectedItem().toString());

    if (selec.equals(«20 pg»)) {

    intent = new Intent(Formula3_calculo_cementacion.this, Formula3_calculo_cementacion.class);
    startActivity(intent);

    }

    if (selec.equals(«13.375 pg»)) {

    intent = new Intent(Formula3_calculo_cementacion.this, Tr13_calculo_cementacion.class);

    startActivity(intent);
    }

    }
    @Override
    public void onNothingSelected(AdapterView adapterView) {

    }

    });

    }

    1. Ramón Invarato Jarroba.com

      Tienes un ejemplo parecido a lo que necesitas en nuestro libro gratuito de Android en https://jarroba.com/libro-android-100-gratis/

  4. Javier

    Buenas. Estoy creando mi primera app y soy nuevo en el campo de la programación aunque estoy cerca de terminarla. el tema es así, en la primer activity tengo varios botones que quiero que cada uno abra una URL distinta pero en la segunda activity que es donde tengo el webview. El problema es que no se como hacerlo, osea no se como formular el Intent» para mandar la dirección y que lo cargue el webview de la segunda actividad. Agradecería su ayuda

    1. Ramón Invarato Jarroba.com

      Hola Javier. Principalmente tienes que pasar la url (una variable string) a la segunda Activity y trabajar con ella. Tienes muchos más ejemplos de Intent en nuestro libro gratuito de Android en https://jarroba.com/libro-android-100-gratis/

  5. david

    Como estan,

    Estoy intentando pasar datos de una activity a un service, quiero que el service se quede con la información que le pase pero cuando cierro la aplicación me da un error

    1. Ramón Invarato Jarroba.com

      ¿Qué error te sale?

  6. Fabio Real

    Hola que tal felicitaciones por el tuto…. una pregunta si deseo enviar informacion masiva y deeseo trabajar en la actividad pero no quiero que cada vez que envio la info a la actividad se inicie de nuevo por que la app se esta cerrando. que podria realizar… te agradezco men..

    1. Ramón Invarato Jarroba.com

      Si la mandas por Internet no se va a iniciar la Activity, salvo por otras circunstancias o así lo tengas en el código. Si quieres enviar la información por Intent u otros medios a otras clases aquí tienes más información en nuestro libro gratuito de Android en http://jarroba.com/libro-android-100-gratis/

  7. Noel

    Buen dia Ramon:

    Muchas gracias por tus aportes, tengo una duda con respecto a pasar informacion se una activity a otra, pero tengo una Activity que es una ListView en esta se muestran datos que obtengo de una Bace de datos remota. Al dar click en un Item este te manda a una nueva Activity y es aqui donde requiero pintar datos especificos de lo seleccionado estos datos ya los obtuve en la activity anterior, Te agradeceria si me das una idea de como puedo mandar esa info a la nueva Activity.

     

    Saludos desde México.

    1. Ramón Invarato Jarroba.com

      Justo tienes un ejemplo completo de pasar datos entre Activities en nuestro libro gratuito en: http://jarroba.com/libro-android-100-gratis/

  8. Eduardo

    Pues yo probando el ejercicio, me sale la primera pantalla, pero al darle al botón, para pasar el string de un activty a otro me da error y me sale de la pantalla. El error que me da es:

    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at com.example.skirlappa.comunicacionactividades.validarNombre.onCreate(validarNombre.java:24)

     

    public class validarNombre extends Activity
    {
    private TextView pasarNombre;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.verificar);

    pasarNombre = (TextView) findViewById(R.id.validar);

    String nombre = getIntent().getStringExtra("nombre");

    pasarNombre.setText(nombre);
    }
    }

     

    1. Ramón Invarato Jarroba.com

      La variable «pasarNombre» tiene un null y es lo que te está dando error. Comprueba que el findViewById() encuenra y tiene acceso correctamente a R.java (que esté bien autogenerado) y que ese id existe en la view R.layout.verificar.

  9. Richie Rodriguez

    Excelente Aporte amigo! (Y)

  10. David Mejía

    Hola, hay manera de apoyarte mediante paypal o algo? me sirvió bastante, increíble que lo que me falta sólo era una línea de código, uso Android Studio.

    1. Ramón Invarato Jarroba.com

      Hola David, agradecemos cualquier apoyo, en estos momentos no tenemos plataforma de pago para apoyar a la web. De momento la mejor manera de apoyar es, pudiendo ayudar a quién lo necesite a que tenga la posibilidad de conocer estos artículos 🙂

      Muchos ánimos!

       

  11. gaby

    hola soy nueva en esto estoy haciendo un login en android estudio y estoy consumiendo los recursos desde un webservice, ya visualizo la informacion desde mi movil pero lo que quiero es que si se cumple la condicion que me paresca una segunda actividad cargando los datos del usuario podria aydarme 🙂

    1. Ramón Invarato Jarroba.com

      Hola Gaby, tienes ejemplos de como pasar de una Activity a otra en http://jarroba.com/activity-entender-y-usar-una-actividad/ y mucho más en nuestro libro de Android gratuito en http://jarroba.com/libro-android-100-gratis/

  12. Diego

    Hola buenas tardes. 
    Tengo un problema espero puedan ayudarme.. 
    Estoy realizando una aplicación de un juego en Android Studio, lo que hace es lo siguiente….
    Abre la aplicacion y estan las opciones de jugar y salir, en el Action bar tengo una opción llamada "opciones" donde el jugador puede elegir si desea musica o no en el juego, si decide que si, mando el valor a la ventana principal por medio del put.Extra(), para de ahí mandarla a la ventana del juego si el jugador elige la opción de jugar. Hasta esa parte voy bien, el problema es que si no elijo si deseo musica o no y me voy directamente a la opción jugar, la aplicación se detiene, ya que no recibe valor de la ventana donde tengo que elegir si deseo música o no. 
    ¿Alguién puede ayudarme en como validar esa parte? 

    Se los agradeceré mucho, que tengan muy buena tarde. 

    1. Ramón Invarato Jarroba.com

      Comprueba que el valor no sea null cuando lo vayas a utilizar. También puedes utilizar el valor por defecto cuando recoges el dato, por ejemplo:

      Long valor = intent.getLongExtra(«clave», -1)

      1. Diego

        Mira, este es el código que tengo en la ventana donde elige si desea música o no:

        public void aceptarPref(View v){
        if(rbSi.isChecked()){
        seleccion = 1;
        }
        Intent i = new Intent(this, MainActivity.class);
        i.putExtra("musica",seleccion);
        startActivity(i);
        finish();
        }

         

        Y aquí es donde recibo el valor de la ventana anterior para mandarla al juego: 

        Bundle bundle = getIntent().getExtras();
        musica = bundle.getInt("musica");

        Intent i = new Intent(this, Registro.class);
        i.putExtra("music", musica);
        startActivity(i);
        finish();

        1. Diego en respuesta a Diego

          Realice como me dijiste, y ya puedo entrar aunque no elija si quiero música o no, ahora el problema es que si elijo que si quiero música no la reproduce. 
          ¿Que puedo hacer ahí? 

          1. Ramón Invarato Jarroba.com en respuesta a Diego

            Tienes que mirar si estás recibiendo correctamente el dato entre Intents. Luego ya es comprobar si estás ejecutando correctamente, echa un vistazo a http://developer.android.com/intl/es/guide/topics/media/mediaplayer.html

  13. Andres Camilo Garcia

    Buen día, amigos no se si me puedan ayudar, estoy haciendo un arraylist en el main con 5 datos, a traves del navigation bar voy a otra actividad donde agrego otro elemento a este arraylist en el main, pero cuando quiero agregar mas elemento se reescribe el ultimo que anexo…. Si alguien sabe que puedo hacer quedo agradecido.

    1. Andres Camilo Garcia

      Con este envio el dato a la actividad donde se encuentra el arraylist:

      if (id == R.id.action_ok) {
      editText = (EditText) findViewById(R.id.txt_descripcion);
      valor = editText.getText().toString();
      Intent i = new Intent(DetailTaskActivity.this, MainActivity.class);
      i.putExtra(«tarea», valor + «»);
      startActivity(i);
      }

      y con este lo recibo y lo agrego a mi arraylist:

      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      mListView = (ListView) findViewById(R.id.listview);
      List data = new ArrayList();
      data.add(«Android»);
      data.add(«iPhone»);
      data.add(«WindowsMobile»);
      data.add(«Blackberry»);
      data.add(«WebOS»);

      ArrayAdapter adapter = new ArrayAdapter(
      MainActivity.this, android.R.layout.simple_list_item_1, data);
      mListView.setAdapter(adapter);
      mListView.setOnItemClickListener(this);

      if (getIntent().getStringExtra(«tarea») != null) {
      String valor = getIntent().getStringExtra(«tarea»);
      data.add(valor);
      }
      }

      1. Ramón Invarato Jarroba.com

        Veo bien el código. Tienes el ArrayList y añades correctamente los elementos ¿Has probado a recorrerlo y a imprimirlo en el logcat? se me ocurre lo que te puse en el otro mensaje, que no se guarde el estado y vuelva a empezar.

        1. german hernadez en respuesta a Ramón Invarato

          Buena tarde Ramon pasa deq estoy creando un proyecto en android y necesito su asesoria :

          Pasa deq tengo un .Xml en el cual contiene como cabecera un EditText, Dos botones para salir, y eliminar y un List View.

          Como puedo agregar informacion que contiene el edittext y agregarlo al list view y una vez agregado ala lista poder tener presionado el item y poder eliminarlo con un menu emergente?

          1. Ramón Invarato Jarroba.com en respuesta a german hernadez

            Para todo eso necesitas echar mano del Adapter (tienes un ejemplo completo en http://jarroba.com/listview-o-listado-en-android/). El resto es un poco largo de explicar por aquí, pero básicamente se basa en el Adapter eliminar y crear elementos, para llamar al notifyDataSetChanged() del Adapter para refrescar los cambios.

    2. Ramón Invarato Jarroba.com

      Hola Andrés,

      Te recomiendo que uses un objeto Singleton o que lo pases como objeto serializado en un Intent.

  14. ANNDY FABRISCIO SAGASTUME AGUILAR

    mira una pregunta soy nuevo en esto, como hago para que a la hora de dar click a un boton me mande a otro panel???

    1. Ramón Invarato Jarroba.com

      Hola Andy,
      eso lo tenemos explicado en varios sitios (tienes un ejemplo en http://jarroba.com/activity-entender-y-usar-una-actividad/). Si estás empezando con Android, tienes un curso introductorio de Android gratuito en nuestro libro gratuito de Android en: http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

  15. Jesus

    Tengo un problema al momento de querer abrir la otra actividad se cierra…ya verifique el AndroidManifest.xml
    bueno me he dado cuenta que se cierra porque al momento de ejecutar un if que le puse este no encuentra datos …en otras palabras no esta pasando los datos de la primera actividad…muchas gracias de ante mano

    1. Ramón Invarato Jarroba.com

      Hola Jesús,

      asegúrate que estás recogiendo los datos por la parte del código por la que pasa seguro (si lo cierras con un if puede que no pase nunca por ahí o solo en ciertos casos).

  16. Mario

    Me gusto su explicación y realice su ejemplo, pero tengo un problema!. No me muestra la segunda ventana, y cuando pulso el boton para pasar a la otra actividad me sale un mensaje que dice «Unfortunately, practica3 has stopped», y se cierra mi aplicacion.

    quisiera que me digan por que es esto. he buscado en internet un codigo parecido y me sale lo mismo.

    1. Ramón Invarato Jarroba.com

      Hola Mario,
      ¿Has declarado el otro Activity en el AndroidManifest.xml? (puedes ver como en http://jarroba.com/activity-entender-y-usar-una-actividad/)

  17. Alan

    Felicidades, aun despues de dos años , este ejemplo me ayudo bastante, sigue adelante y espero sigas en esto saludos…

  18. Mike

    Buenas tardes Ramon, nuevamente agradeciendo por los Post que dedicas, que son muy intuitivos, y para nada aburridos. me gustaria saber, si dentro de tus apuntes, tendras ejemplos de como consumir un webservice, me gustaria tener la opinion de un experto como tu, Gracias de ante mano.

    saludos… desde Monterrey Mexico

    1. Ramón Invarato Jarroba.com

      De nada Mike, seguiremos mejorando 🙂

      Sobre tu pregunta, para Android recomiendo (y Android recomienda) utilizar siempre JSON, te recomiendo que eches un vistazo al ejemplo de http://developer.android.com/reference/android/util/JsonReader.html. Puedes utilizar utilizar otros formatos coomo XML que también son válidos. SOAP no está soportado directamente por las bibliotecas de Android (y no se recomienda por la lentitud para procesarse y que consume innecesariamente más Internet que los otros propuestos); de cualquier manera, si lo tuvieras que usar, puedes utilizar la librería externa KSOAP (en https://code.google.com/p/ksoap2-android/)

  19. Mike

    Buenas tardes Ramon. primeramente quiero darte las gracias, todos tus post me han servido de mucho, sin embargo tengo una duda, como puedo pasar un objeto a otra activity?

    1. Ramón Invarato Jarroba.com

      Hola Mike,

      me alegro que te hayan servido los artículos, nos dice mucho para seguir mejorando 🙂

      Sobre pasar un objeto entre Activites tienes varias maneras. Uno serializando el objeto (el objeto que quieras pasar que implemente de «Serializable») como por ejemplo:
      public class MiClaseSerializable implements Serializable {
      // Contenido de la clase a pasar entre Activities
      }

      Para pasarlo a la otra Activity simplemente lo añadimos como extra:
      MiClaseSerializable objetoSerializado = new MiClaseSerializable();
      ..
      miintent.putExtra("miObjetoSerializado", objetoSerializado);

      Y lo obtienes en el otro Activity con:
      MiClaseSerializable objetoRecuperado = getIntent().getSerializableExtra("miObjetoSerializado");

      Otra manera de pasar objetos entre Activities es con el patrón Singleton (explicación y ejemplo en Java en: http://es.wikipedia.org/wiki/Singleton)

      1. Mike

        muchas gracias, con «implements Serializable», funciono a la perfeccion

  20. Edgar Saico

    BUEN APORTE

  21. alek

    Seria buena idea si creo un servicio donde guardaria data; por ejemplo una especie de flag, la activity consumiria cada cierto tiempo o talvez con un listener ? asi si el flag es 0 me desactiva los botones o los activa si el flag es 1 ? es posible inplementar esta idea ? tendrias algun ejemplo de como pasar datos de un servicio a una activity y un ejemplo de listener para servicios ? gracias de antemano

  22. alek

    Hola amigos,

    de nuevo por aqui, estoy haciendo pruebas para pasar datos entre «activities», para enviar uso esto :

    public void sendInvitation(View view){
    Intent i = new Intent(this, MainActivity2.class);
    i.putExtra(«game», Integer.toString(flag));
    startActivity(i);
    }

    y para recibir, escribo esto en el onCreate :

    final int play2 = Integer.valueOf(getIntent().getStringExtra(«game»));
    tvw01.setText(«Flag : » + Integer.toString(play2));

    mi duda es, siempre debo recibir los datos en el oncreate ? los valores siempre deben pasar como string ? puedo pasarlos como int ? como haria para que la variable recibida este disponible tambien para otros view, botones que se encuentren fuera del onCreate ? u otras clases externas de forma eficiente ?

    Gracias de antemano

    1. Ramón Invarato Jarroba.com

      Buenas alek,

      no hace falta recibir todos los datos en el oncreate (el oncreate actúa como constructor, por lo que es bueno que los reciba para construir la Actividad, pero solo para los datos iniciales).

      Existe otras maneras de pasar datos entre actividades como los Shared Preferences, las bases de datos SQLite, etc para datos primitivos (String, int, boolean, etc). Te recomiendo que eches un vistazo en http://developer.android.com/guide/topics/data/data-storage.html . En caso de mucha necesidad, como pasar objetos enteros, también puedes usar la clase singleton.

Deja un comentario


Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.