Android - recoger parametros

 
Vista:
Imágen de perfil de Charly
Val: 123
Bronce
Ha aumentado su posición en 2 puestos en Android (en relación al último mes)
Gráfica de Android

recoger parametros

Publicado por Charly (69 intervenciones) el 26/10/2016 17:19:37
Hola, estoy creando una aplicación con dos actividades y pasándole información de una a otra y viceversa.
Pasar de la primera a la segunda me sale, pero al escribir el código Java en la primera para recibir información de la segunda me da un error en el requestCode.
Sin embargo el código del archivo Java de la segunda actividad está bien y no me da ningún error.
Pongo el código de la primera activity:
En el método onCreate he puesto esto:
1
2
Intent i = new Intent(this, Mascota2Activity.class);
        startActivityForResult(i,this.requestCode);
Y, además, he hecho este otro método:
1
2
3
4
5
6
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(requestCode==this.requestCode && resultCode==RESULT_OK) {
            String res = data.getExtras().getString("resultado");
        }
    }
He puesto tachado lo que me sale en rojo.
Al ejecutarlo en la ventana de mensajes me aparece lo siguiente: Error: cannot find symbol variable requestCode.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 444
Oro
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

recoger parametros

Publicado por juanki (253 intervenciones) el 26/10/2016 17:57:33
Pregunta tonta: ¿has declarado la variable requestCode?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Charly
Val: 123
Bronce
Ha aumentado su posición en 2 puestos en Android (en relación al último mes)
Gráfica de Android

recoger parametros

Publicado por Charly (69 intervenciones) el 26/10/2016 19:40:23
Hola Juanki.
No, no la he declarado porque no se que tipo de variable es.
Necesitaba hacer ese ejercicio y he buscado por internet el código a escribir.
¿Tiene que ser int como la del método? ¿Para qué sirve?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 444
Oro
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

recoger parametros

Publicado por juanki (253 intervenciones) el 26/10/2016 20:38:23
Hola

Pues por eso el error, por que no la has declarado. Obviamente tiene que ser de tipo adecuado, si el método pide que se le pase un int, pues tiene que ser de tipo int.

Esa variable se suele declarar como una variable de clase static final int.

Y se usa para saber qué activity se llamó. Puedes abrir diferentes activitis y esa es la forma, cuando se captura el valor que retornaron, de saber cual de ellas fue la que se lanzó.

Ese ejemplo es un poco confuso por que el nombre de la variable requestCode, es un poco genérico, lo normal es ponerle uno adecuado a la activity que se le asocia, por ejemplo requestCodeUsuarios, requestCodeLoQueSea.... Por supuesto el valor de cada una de ellas tiene que ser diferente, si no no valdría para nada.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Charly
Val: 123
Bronce
Ha aumentado su posición en 2 puestos en Android (en relación al último mes)
Gráfica de Android

recoger parametros

Publicado por Charly (69 intervenciones) el 26/10/2016 20:45:25
Bueno ya voy sabiendo un poco más.
La he declarado así:
static final int requestCodeMascota1=0;
Y le he puesto ese nombre en los dos sitios, pero a qué la tengo que inicializar, ¿al número de orden de activity al que llamo, o cómo?
Perdona por tantas preguntas, pero en Android estoy un poco "pez".
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 444
Oro
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

recoger parametros

Publicado por juanki (253 intervenciones) el 26/10/2016 23:01:21
Hola

La puedes inicializar al valor que quieras, la única condición es que si declara varias, sean los valores diferentes, pero se suele iniciar con 1, 2, 3.... poro por poner, lo que quieras.

Te pongo un pequeño ejemplo de como se podrían abrir dos activitys y capturar lo que devuelve:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private static final int REQUEST_AC_A = 1;
    private static final int REQUEST_AC_B = 2;
 
 
// un botón que abre un activity    
public void boton1_click(View view) {
        Intent i = new Intent(this, ActivityA.class);
 
        startActivityForResult(i, REQUEST_AC_A);
    }
 
// otro botón, abre otra diferente
    public void boton2_click(View view) {
        Intent i = new Intent(this, ActivityB.class);
 
        startActivityForResult(i, REQUEST_AC_B);
    }
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
 
        if(resultCode == RESULT_OK) {
            switch(requestCode) { // aquí se usa para ver cual terminó
                case REQUEST_AC_A:
                    // procesar el retorno de la ActivityA
                break;
                case REQUEST_AC_B:
                    // procesar el retorno de la ActivityB
                break;
            }
        }
    }

Como ves, le puse los valores 1 y 2, pero podría haber puesto los que quisiera, con la única condición que sean diferentes, es solo para poder identificar que activity terminó, el valor que le asignas no lo usas, solo compruebas que sea ese.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Charly
Val: 123
Bronce
Ha aumentado su posición en 2 puestos en Android (en relación al último mes)
Gráfica de Android

recoger parametros

Publicado por Charly (69 intervenciones) el 28/10/2016 08:06:39
Muchas gracias Juanki.
Me has servido de mucha ayuda.
Ya tengo el ejercicio terminado y funcionando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Charly
Val: 123
Bronce
Ha aumentado su posición en 2 puestos en Android (en relación al último mes)
Gráfica de Android

recoger parametros

Publicado por Charly (69 intervenciones) el 28/10/2016 16:52:35
Hola de nuevo, Juanki.
He seguido avanzando con las mismas actividades y en el siguiente ejercicio tengo que darle a un animal y que se cierre la segunda activity, y en la primera que aparezca la imagen del animal elegido.
He hecho el código necesario y al probarlo y seleccionar un animal se me cierra toda la aplicación.
Me da error de puntero nulo en la linea 60 del archivo, que tiene: layout.removeView(img);
Te pongo el código a continuación:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package charly.izquierdofp.es.curso;
 
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
 
public class Mascota1Activity extends AppCompatActivity {
 
    EditText txtNombre;
    RadioGroup rg;
    int requestCode = 1;
    LinearLayout layout;
    ImageView img;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mascota1);
        txtNombre = (EditText) findViewById(R.id.txtNombre);
        rg = (RadioGroup) findViewById(R.id.RbSexo);
        layout = (LinearLayout) findViewById(R.id.layout);
    }
    /*@Override
    public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_t4_a17, menu);
        return true;
    }*/
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
//noinspection SimplifiableIfStatement
        if (id == R.id.activity_mascota1) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    public void PulsaBoton(View view) {
        Intent i = new Intent(this, Mascota2Activity.class);
        i.putExtra("nombre", txtNombre.getText().toString());
        String sexo = "o";
        if (rg.getCheckedRadioButtonId() == R.id.RbFemenino)
            sexo = "a";
        i.putExtra("sexo", sexo);
        startActivityForResult(i, requestCode);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == this.requestCode && resultCode == RESULT_OK) {
            int id = data.getExtras().getInt("id");
            layout.removeView(img);
            img = new ImageView(this);
            switch (id) {
                case R.id.Perro:
                    img.setImageResource(R.drawable.perro);
                    break;
                case R.id.Gato:
                    img.setImageResource(R.drawable.gato);
                    break;
                case R.id.Hamster:
                    img.setImageResource(R.drawable.hamster);
                    break;
                case R.id.Pez:
                    img.setImageResource(R.drawable.pez);
                    break;
            }
            layout.addView(img);
        }
    }
}
El resto del programa funciona perfecto.
Muchas gracias de antemano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 444
Oro
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

recoger parametros

Publicado por juanki (253 intervenciones) el 28/10/2016 22:59:31
Hola

¿Y qué es lo que te dice que es null? ¿img?

Según dices, en la línea 60 te da el error y precisamente en la 61 inicializas img. No veo otra inicialización previa.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Charly
Val: 123
Bronce
Ha aumentado su posición en 2 puestos en Android (en relación al último mes)
Gráfica de Android

recoger parametros

Publicado por Charly (69 intervenciones) el 29/10/2016 15:28:25
Ahora me aparece el mismo error pero en la linea 61:
Caused by: java.lang.NullPointerException
at charly.izquierdofp.es.curso.Mascota1Activity.onActivityResult(Mascota1Activity.java:61)
En la linea 61 hay el siguiente código:
1
img = new ImageView(this);
Creo que el error debe estar al manejar la imagen seleccionada en la segunda activity y querer pasarla a la primera activity.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 444
Oro
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

recoger parametros

Publicado por juanki (253 intervenciones) el 30/10/2016 10:45:40
Hola

Pues sí, el algún lugar está ocurriendo algo.

De todas formas, no entiendo lo que quieres hacer. Si lo que quieres es mostrar una imagen y que esta cambie de acuerdo a lo que seleccione el usuario, puedes meter el ImageView en el layout (cuando diseñas la ventana) y luego desde código solo le vas cambiando la imagen a la que corresponda, no tienes que ir creando y destruyendo ImageView. Pero, como digo, no sé si será lo que quieres pues no sé lo que pretendes hacer.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Charly
Val: 123
Bronce
Ha aumentado su posición en 2 puestos en Android (en relación al último mes)
Gráfica de Android

recoger parametros

Publicado por Charly (69 intervenciones) el 30/10/2016 16:35:20
Gracias Juanki.
Bueno, pues ya he resuelto mi problema.
Yo pensaba que había que eliminar la imagen de una activity y pasarla a la otra, pero no hacia falta.
Simplemente al mandar que apareciera la primera activity, cargar la imagen seleccionada en la segunda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar