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.

Shaista Naaz
fuente
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");
}
Will Tate
fuente
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);
        }
    }
}
ReemaRazdan
fuente
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.

Zar E Ahmer
fuente
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!

Sindri Þór
fuente
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.

عاقب انصاری
fuente
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);
}
serv-inc
fuente
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");
}
Samet ÖZTOPRAK
fuente
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";
}
Khemraj
fuente
¿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");
David Untama
fuente
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

kamaljeet Singh
fuente
2

enviar

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

obtener

String myData = getIntent.getStringExtra("key");
H.Fa8
fuente
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();
        }
    }
Habeeb Rahman kalathil
fuente
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

Habeeb Rahman kalathil
fuente
¿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.

Srinivas Nallapu
fuente
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);
Shaheen Ahamed S
fuente
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 ;)

shyam_
fuente
-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

Adithya MPN
fuente
Usted puede pero no debe :-)
Blundell