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.


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

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

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.


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é!


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.


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

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

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

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

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


2

envoyer

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

avoir

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

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

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


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.


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

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


-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


Vous pouvez mais vous ne devriez pas :-)
Blundell
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.