Cómo usar putExtra () y getExtra () para datos de cadena


318

¿Alguien puede decirme cómo usar exactamente getExtra()y putExtra()para qué? En realidad, tengo una variable de cadena, digamos str, que almacena algunos datos de cadena. Ahora, quiero enviar estos datos de una actividad a otra actividad.

  Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
  String keyIdentifer  = null;
  i.putExtra(strName, keyIdentifer );

y luego en SecondScreen.java

 public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.table);
        TextView userName = (TextView)findViewById(R.id.userName);
        Bundle bundle = getIntent().getExtras();

        if(bundle.getString("strName")!= null)
        {
            //TODO here get the string stored in the string variable and do 
            // setText() on userName 
        }

    }

Sé que es una pregunta muy básica, pero desafortunadamente estoy atrapado aquí. Por favor ayuda.

Gracias,

Editar: Aquí la cadena que estoy tratando de pasar de una pantalla a otra es dinámica. Es decir, tengo un editText donde obtengo una cadena cualquiera que sea el tipo de usuario. Luego con la ayuda de myEditText.getText().toString(). Recibo el valor ingresado como una cadena y luego tengo que pasar estos datos.


i.putExtra (strName, keyIdentifer); Esta instrucción tiene una variable strName mientras que bundle.getString ("strName") tiene una cadena "strName". Su intent.putExtra (clave, valor) y intent.getExtras (). GetString (clave); asegúrese de utilizar la misma clave en poner y obtener.
seema

Respuestas:


416

Use esto para "poner" el archivo ...

Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
String strName = null;
i.putExtra("STRING_I_NEED", strName);

Luego, para recuperar el valor, intente algo como:

String newString;
if (savedInstanceState == null) {
    Bundle extras = getIntent().getExtras();
    if(extras == null) {
        newString= null;
    } else {
        newString= extras.getString("STRING_I_NEED");
    }
} else {
    newString= (String) savedInstanceState.getSerializable("STRING_I_NEED");
}

10
¿Se usa el código "savedInstanceState ..." y "... getSerialiable" para manejar los cambios de orientación? en caso negativo, ¿para qué se usa ese código?
AJW

Estoy usando Android 3.0.1 y tuve que usar this.getActivity().getIntent().getExtras().
Tyler

Si usa PendingIntents, debe usar el indicador "PendingIntent.FLAG_UPDATE_CURRENT": stackoverflow.com/a/29846408/2738240 Intent intento = nuevo Intento (contexto, MainActivity.class); intent.putExtra ("button_id", 1); PendingIntent pendienteIntent = PendingIntent.getActivity (contexto, 0, intento, PendingIntent.FLAG_UPDATE_CURRENT); RemoteViews views = new RemoteViews (context.getPackageName (), R.layout.my_test_widget); views.setOnClickPendingIntent (R.id.my_test_widget_button_1, PendienteIntento);
Matthias Luh

69

primero Screen.java

text=(TextView)findViewById(R.id.tv1);
edit=(EditText)findViewById(R.id.edit);
button=(Button)findViewById(R.id.bt1);

button.setOnClickListener(new OnClickListener() {
    public void onClick(View arg0) {
        String s=edit.getText().toString();

        Intent ii=new Intent(MainActivity.this, newclass.class);
        ii.putExtra("name", s);
        startActivity(ii);
    }
});

Second Screen.java

public class newclass extends Activity
{
    private TextView Textv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.intent);
        Textv = (TextView)findViewById(R.id.tv2);
        Intent iin= getIntent();
        Bundle b = iin.getExtras();

        if(b!=null)
        {
            String j =(String) b.get("name");
            Textv.setText(j);
        }
    }
}

52

El mejor método ...

SendingActivity

Intent intent = new Intent(SendingActivity.this, RecievingActivity.class);
intent.putExtra("keyName", value);  // pass your values and retrieve them in the other Activity using keyName
startActivity(intent);

Recepción de actividad

 Bundle extras = intent.getExtras();
    if(extras != null)
    String data = extras.getString("keyName"); // retrieve the data using keyName 

/// forma más corta de recibir datos ...

String data = getIntent().getExtras().getString("keyName","defaultKey");

// Esto requiere api 12. // el segundo parámetro es opcional. Si keyName es nulo, utilice los defaultkeydatos como.


18

Esto es lo que he estado usando, espero que ayude a alguien ... simple y afectivo.

enviar datos

    intent = new Intent(getActivity(), CheckinActivity.class);
    intent.putExtra("mealID", meal.Meald);
    startActivity(intent);

obtener datos

    int mealId;

    Intent intent = getIntent();
    Bundle bundle = intent.getExtras();

    if(bundle != null){
        mealId = bundle.getInt("mealID");
    }

¡salud!


1
Todavía tengo que recordarme a mí mismo, de vez en cuando, cómo se hizo esto correctamente ... ¡jaja!
Sindri Sepór

10

Es muy fácil de implementar intenten Android. Te lleva a pasar de una actividad a otra, tenemos dos métodos putExtra();y getExtra();ahora te estoy mostrando el ejemplo.

    Intent intent = new Intent(activity_registration.this, activity_Login.class);
                intent.putExtra("AnyKeyName", Email.getText().toString());  // pass your values and retrieve them in the other Activity using AnyKeyName
                        startActivity(intent);

Ahora tenemos que obtener el valor del AnyKeyNameparámetro, el código mencionado a continuación ayudará a hacer esto

       String data = getIntent().getExtras().getString("AnyKeyName");
        textview.setText(data);

Podemos establecer fácilmente el valor de recepción desde Intentdonde lo necesitemos.


6

Un pequeño anexo: no tiene que crear su propio nombre para la clave, Android proporciona estos, f.ex. Intent.EXTRA_TEXT. Modificando la respuesta aceptada:

Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
String strName = null;
i.putExtra(Intent.EXTRA_TEXT, strName);

Luego, para recuperar el valor, intente algo como:

String newString;
Bundle extras = getIntent().getExtras();
if(extras == null) {
    newString= null;
} else {
    newString= extras.getString(Intent.EXTRA_TEXT);
}

4
Intent intent = new Intent(view.getContext(), ApplicationActivity.class);
                        intent.putExtra("int", intValue);
                        intent.putExtra("Serializable", object);
                        intent.putExtra("String", stringValue);
                        intent.putExtra("parcelable", parObject);
                        startActivity(intent);

AplicaciónActividad

Intent intent = getIntent();
Bundle bundle = intent.getExtras();

if(bundle != null){
   int mealId = bundle.getInt("int");
   Object object = bundle.getSerializable("Serializable");
   String string = bundle.getString("String");
   T string = <T>bundle.getString("parcelable");
}

4

Actualización en clase de intención .

  • Se usa hasExtra()para verificar si la intención tiene datos en la clave.
  • Puede usar ahora getStringExtra()directamente.

Pase de datos

intent.putExtra(PutExtraConstants.USER_NAME, "user");

Obtener datos

String userName;
if (getIntent().hasExtra(PutExtraConstants.USER_NAME)) {
    userName = getIntent().getStringExtra(PutExtraConstants.USER_NAME);
}

Siempre ponga claves en constantes como mejor práctica.

public interface PutExtraConstants {
    String USER_NAME = "USER_NAME";
}

¿Por qué es PutExtraConstantsuna interfaz?
Big_Chair

@Big_Chair Debido PutExtraConstantsclase contiene únicas constantes ( public, static, final). Por lo tanto, es mejor usar la interfaz para Constantes.
Khemraj

3

Más simple

lado del remitente

Intent i = new Intent(SourceActiviti.this,TargetActivity.class);
i.putExtra("id","string data");
startActivity(i)

lado receptor

Intent i = new Intent(SourceActiviti.this,TargetActivity.class);
String strData = i.getStringExtra("id");

3

Poner cadena en objeto de intención

  Intent intent = new Intent(FirstActivity.this,NextAcitivity.class);
  intent.putExtra("key",your_String);
  StartActivity(intent);

NextAcitvity en el método onCreate get String

String my_string=getIntent().getStringExtra("key");

ese es un método fácil y corto


2

enviar

startActivity(new Intent(First.this, Secend.class).putExtra("key",edit.getText.tostring));

obtener

String myData = getIntent.getStringExtra("key");

1

poner función

etname=(EditText)findViewById(R.id.Name);
        tvname=(TextView)findViewById(R.id.tvName);

        b1= (ImageButton) findViewById(R.id.Submit);

        b1.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                String s=etname.getText().toString();

                Intent ii=new Intent(getApplicationContext(), MainActivity2.class);
                ii.putExtra("name", s);
                Toast.makeText(getApplicationContext(),"Page 222", Toast.LENGTH_LONG).show();
                startActivity(ii);
            }
        });



getfunction 

public class MainActivity2 extends Activity {
    TextView tvname;
    EditText etname;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activity2);
        tvname = (TextView)findViewById(R.id.tvName);
        etname=(EditText)findViewById(R.id.Name);
        Intent iin= getIntent();
        Bundle b = iin.getExtras();

        if(b!=null)
        {

          String j2 =(String) b.get("name");

etname.setText(j2);
            Toast.makeText(getApplicationContext(),"ok",Toast.LENGTH_LONG).show();
        }
    }

1

Empujar datos

import android.content.Intent;

    ...

    Intent intent = 
        new Intent( 
            this, 
            MyActivity.class );
    intent.putExtra( "paramName", "paramValue" );
    startActivity( intent );

El código anterior podría estar dentro del principal activity. " MyActivity.class" es el segundo Activityque queremos lanzar; debe incluirse explícitamente en su AndroidManifest.xmlarchivo.

<activity android:name=".MyActivity" />

Extraer datos

import android.os.Bundle;

    ...

    Bundle extras = getIntent().getExtras();
    if (extras != null)
    {
        String myParam = extras.getString("paramName");
    }
    else
    {
        //..oops!
    }

En este ejemplo, el código anterior estaría dentro de su MyActivity.javaarchivo.

Gotchas

Este método solo puede pasar strings. Entonces, digamos que necesita pasar un ArrayLista su ListActivity; Una posible solución es pasar una cadena separada por comas y luego dividirla en el otro lado.

Soluciones alternativas

Utilizar SharedPreferences


¿Y si quiero pasar una cadena de string.xml?
HB.

1

Simple, en la primera actividad

    EditText name= (EditText) findViewById(R.id.editTextName);
    Button button= (Button) findViewById(R.id.buttonGo);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(MainActivity.this,Main2Activity.class);
            i.putExtra("name",name.getText().toString());
           startActivity(i);
          }
    });

En segunda actividad

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    TextView t = (TextView) findViewById(R.id.textView);
    Bundle bundle=getIntent().getExtras();
    String s=bundle.getString("name");
    t.setText(s);
}

Puede agregar condiciones if / else si lo desea.


1

En FirstScreen.java

    Intent intent = new Intent(FirstScreen.this, SecondScreen.class);
    String keyIdentifier = null;
    intent.putExtra(strName, keyIdentifier);

En SecondScreen.java

    String keyIdentifier;
    if (savedInstanceState != null)
        keyIdentifier= (String) savedInstanceState.getSerializable(strName);
    else
        keyIdentifier = getIntent().getExtras().getString(strName);

Bienvenido a SO! Edite su respuesta y explique un poco por qué y cómo resuelve el problema. Para obtener más orientación, consulte stackoverflow.com/help/how-to-answer
B - rian

0

poner la cuerda primero

Intent secondIntent = new Intent(this, typeof(SecondActivity));
            secondIntent.PutExtra("message", "Greetings from MainActivity");

recuperarlo después de eso

var message = this.Intent.GetStringExtra("message");

eso es todo ;)


-1

Simplemente puede usar una variable estática para almacenar la cadena de su texto de edición y luego usar esa variable en la otra clase. Espero que esto solucione tu problema


Usted puede pero no debe :-)
Blundell
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.