2011-03-10 83 views
235

¿Puede alguien decirme cómo usar exactamente getExtra() y putExtra() para Intent. En realidad, tengo una variable de cadena que dice str, que almacena algunos datos de cadena. Ahora quiero enviar estos datos de una actividad a otra actividad.Cómo usar putExtra() y getExtra() para datos de cadena

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

y luego en el 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 pregunta muy básica, pero por desgracia estoy atascado aquí. Por favor ayuda.

Gracias,

editado: Aquí la cadena de la que estoy tratando de pasar de una pantalla a la otra es dinámica. Es decir, tengo un editText en el que recibo cadenas de cualquier tipo de usuario. Luego, con la ayuda de myEditText.getText().toString(). Estoy obteniendo el valor ingresado como una cadena, entonces tengo que pasar esta información.

+0

i.putExtra (strNombre, keyIdentifer); Esta instrucción tiene la variable strName while bundle.getString ("strName") tiene la cadena "strName". Its intent.putExtra (clave, valor) y intent.getExtras(). GetString (clave); asegúrate de estar utilizando la misma clave en put y get. – seema

Respuesta

332

Utilice esta "poner" el archivo ...

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

Entonces, para recuperar el valor intentar 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"); 
} 
+6

es el código "savedInstanceState ..." y "... getSerialiable" utilizado para manejar cambios de orientación? si no, ¿para qué se usa ese código? – AJW

57

primera 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); 
    } 
}); 

Segunda pantalla.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); 
     } 
    } 
} 
39

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); 

RecievingActivity

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

/// camino más corto para recibir los datos ..

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

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

11

Esto es lo que he estado usando, con suerte, ayuda a alguien ... simple y afectivo.

enviar los 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"); 
    } 

saludos!

+1

Todavía tengo que recordarme a mí mismo, de vez en cuando, cómo se hizo esto correctamente ... ¡jajaja! –

6

Es muy fácil de implementar intent en Android .. Se le lleva a pasar de una actividad a otra actividad, tenemos que 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 parámetro AnyKeyName, el código de abajo mencionados le ayudará en hacer esto

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

Podemos establecer fácilmente el valor de recepción de Intent, donde quiera que se requiere.

2

más sencilla

lado del remitente

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

lado del receptor

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

enviar datos

import android.content.Intent; 

    ... 

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

El co anterior de podría estar dentro de la principal activity. "MyActivity.class" es el segundo Activity que queremos iniciar; debe incluirse explícitamente en su archivo AndroidManifest.xml.

<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 sería dentro de su archivo MyActivity.java.

Gotchas

Este método sólo puede pasar strings. Entonces digamos que necesita pasar un ArrayList a su ListActivity; una solución posible es pasar una secuencia separada por comas y luego dividirla en el otro lado.

Soluciones alternativas

Uso SharedPreferences

+0

y qué pasa si quiero pasar una cadena de string.xml? –

1

función put

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(); 
     } 
    } 
0

simple, En primer 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 segundo 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.

0

cadena de poner en primer lugar

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

recuperarlo después de que

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

eso es todo;)

3
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); 

ApplicationActivity

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

Una pequeña adición: no tiene que crear su propio nombre para la clave, android proporciona estos, f.ex. Intent.EXTRA_TEXT. La modificación de la respuesta aceptada:

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

Entonces, para recuperar el valor de intentar algo como:

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