Comment utiliser putExtra () et getExtra () pour les données de chaîne

318

Quelqu'un peut-il s'il vous plaît me dire exactement comment utiliser getExtra()et putExtra()à des fins? En fait, j'ai une variable de chaîne, disons str, qui stocke des données de chaîne. Maintenant, je veux envoyer ces données d'une activité à une autre.

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

puis dans le 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 
        }

    }

Je sais que c'est une question très fondamentale mais malheureusement je suis coincé ici. Veuillez aider.

Merci,

Edit: Ici la chaîne que j'essaie de passer d'un écran à l'autre est dynamique. Autrement dit, j'ai un editText où je reçois une chaîne quels que soient les types d'utilisateurs. Puis avec l'aide de myEditText.getText().toString(). J'obtiens la valeur entrée sous forme de chaîne, puis je dois transmettre ces données.

Shaista Naaz
la source
i.putExtra (strName, keyIdentifer); Cette instruction a une variable strName tandis que bundle.getString ("strName") a une chaîne "strName". Son intention.putExtra (clé, valeur) et intention.getExtras (). GetString (clé); assurez-vous que vous utilisez la même clé dans put et get.
seema du

Réponses:

416

Utilisez-le pour "mettre" le fichier ...

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

Ensuite, pour récupérer la valeur, essayez quelque chose comme:

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
la source
10
les codes "savedInstanceState ..." et "... getSerialiable" sont-ils utilisés pour gérer les changements d'orientation? si non, à quoi sert ce code?
AJW
J'utilise Android 3.0.1 et je devais l'utiliser this.getActivity().getIntent().getExtras().
Tyler
Si vous utilisez PendingIntents, vous devez utiliser l'indicateur "PendingIntent.FLAG_UPDATE_CURRENT": stackoverflow.com/a/29846408/2738240 Intention intention = new Intent (new Intent (context, MainActivity.class); intent.putExtra ("button_id", 1); PendingIntent pendingIntent = PendingIntent.getActivity (contexte, 0, intention, PendingIntent.FLAG_UPDATE_CURRENT); Vues RemoteViews = nouvelles RemoteViews (context.getPackageName (), R.layout.my_test_widget); views.setOnClickPendingIntent (R.id.my_test_widget_button_1, pendingIntent);
Matthias Luh
69

premier 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
la source
52

Meilleure méthode ...

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 

/// moyen le plus court de recevoir des données ..

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

// Cela nécessite une API 12. // le deuxième paramètre est facultatif. Si keyName est null, utilisez les defaultkeydonnées as.

Zar E Ahmer
la source
18

C'est ce que j'utilise, j'espère que cela aide quelqu'un .. simple et affectif.

envoyer des données

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

obtenir des données

    int mealId;

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

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

à votre santé!

Sindri Þór
la source
1
Je dois encore me rappeler de temps en temps comment cela a été fait correctement .. lol!
Sindri Þór du
10

Il est très facile à mettre intenten œuvre dans Android .. Il vous faut passer d'une activité à une autre, nous avons deux méthodes putExtra();et getExtra();maintenant je vous montre l'exemple ..

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

Maintenant, nous devons obtenir la valeur du AnyKeyNameparamètre, le code mentionné ci-dessous vous aidera à le faire

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

Nous pouvons facilement définir la valeur de réception de Intent, partout où nous avons besoin.

عاقب انصاری
la source
6

Un petit addenda: vous n'avez pas besoin de créer votre propre nom pour la clé, Android les fournit, f.ex. Intent.EXTRA_TEXT. Modification de la réponse acceptée:

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

Ensuite, pour récupérer la valeur, essayez quelque chose comme:

String newString;
Bundle extras = getIntent().getExtras();
if(extras == null) {
    newString= null;
} else {
    newString= extras.getString(Intent.EXTRA_TEXT);
}
serv-inc
la source
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);

ApplicationActivité

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
la source
4

Mise à jour dans la classe Intent .

  • Utilisez hasExtra()pour vérifier si l'intention contient des données sur la clé.
  • Vous pouvez utiliser maintenant getStringExtra()directement.

Transmettre les données

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

Obtenir des données

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

Mettez toujours les clés dans les constantes comme meilleure pratique.

public interface PutExtraConstants {
    String USER_NAME = "USER_NAME";
}
Khemraj
la source
Pourquoi PutExtraConstantsune interface?
Big_Chair
@Big_Chair Parce que la PutExtraConstantsclasse ne contient que des constantes ( public, static, final). Il est donc préférable d'utiliser l'interface pour les constantes.
Khemraj
3

Plus simple

côté expéditeur

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

côté récepteur

Intent i = new Intent(SourceActiviti.this,TargetActivity.class);
String strData = i.getStringExtra("id");
David Untama
la source
3

Mettre une chaîne dans un objet d'intention

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

NextAcitvity dans la méthode onCreate get String

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

c'est une méthode simple et courte

kamaljeet Singh
la source
2

envoyer

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

avoir

String myData = getIntent.getStringExtra("key");
H.Fa8
la source
1

mettre la fonction

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
la source
1

Données push

import android.content.Intent;

    ...

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

Le code ci-dessus peut être à l'intérieur du principal activity. " MyActivity.class" est le deuxième que Activitynous voulons lancer; il doit être explicitement inclus dans votre AndroidManifest.xmlfichier.

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

Extraire des données

import android.os.Bundle;

    ...

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

Dans cet exemple, le code ci-dessus se trouverait dans votre MyActivity.javafichier.

Gotchas

Cette méthode ne peut que passer strings. Disons donc que vous devez passer un ArrayListà votre ListActivity; une solution de contournement possible consiste à passer une chaîne séparée par des virgules, puis à la diviser de l'autre côté.

Solutions alternatives

Utilisation SharedPreferences

Habeeb Rahman kalathil
la source
et si je veux passer une chaîne de string.xml?
HB.
1

Simple, dans la première activité-

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

Dans la deuxième activité-

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

Vous pouvez ajouter des conditions if / else si vous le souhaitez.

Srinivas Nallapu
la source
1

À FirstScreen.java

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

Sur SecondScreen.java

    String keyIdentifier;
    if (savedInstanceState != null)
        keyIdentifier= (String) savedInstanceState.getSerializable(strName);
    else
        keyIdentifier = getIntent().getExtras().getString(strName);
Shaheen Ahamed S
la source
Bienvenue chez SO! Veuillez modifier votre réponse et expliquer un peu pourquoi et comment cela résout le problème. Pour plus d'informations, voir stackoverflow.com/help/how-to-answer
B - rian
0

mettre la chaîne en premier

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

récupérer après cela

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

c'est tout ;)

shyam_
la source
-1

Vous pouvez simplement utiliser une variable statique pour stocker la chaîne de votre edittext, puis utiliser cette variable dans l'autre classe. J'espère que cela résoudra votre problème

Adithya MPN
la source
Vous pouvez mais vous ne devriez pas :-)
Blundell