Come usare putExtra () e getExtra () per i dati di stringa


318

Qualcuno può dirmi come usare esattamente getExtra()e putExtra()per gli intenti? In realtà ho una variabile stringa, diciamo str, che memorizza alcuni dati stringa. Ora, voglio inviare questi dati da un'attività a un'altra.

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

e poi in 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 
        }

    }

So che è una domanda molto semplice, ma sfortunatamente sono bloccato qui. Per favore aiuto.

Grazie,

Modifica: qui la stringa che sto cercando di passare da una schermata all'altra è dinamica. Cioè ho un editText dove sto ricevendo una stringa qualunque tipo di utente. Quindi con l'aiuto di myEditText.getText().toString(). Ricevo il valore inserito come stringa, quindi devo passare questi dati.


i.putExtra (strName, keyIdentifer); Questa istruzione ha la variabile strName mentre bundle.getString ("strName") ha la stringa "strName". Its intent.putExtra (key, value) e intent.getExtras (). GetString (key); assicurati di utilizzare la stessa chiave in put e get.
seema

Risposte:


416

Usa questo per "mettere" il file ...

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

Quindi, per recuperare il valore, provare qualcosa del tipo:

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
il codice "saveInstanceState ..." e "... getSerialiable" è utilizzato per gestire i cambiamenti di orientamento? se no, a che cosa serve quel codice?
AJW

Sto usando Android 3.0.1 e ho dovuto usare this.getActivity().getIntent().getExtras().
Tyler,

Se si utilizza PendingIntents, è necessario utilizzare il flag "PendingIntent.FLAG_UPDATE_CURRENT": stackoverflow.com/a/29846408/2738240 Intent = intenti new Intent (contesto, MainActivity.class); intent.putExtra ("button_id", 1); PendingIntent pendingIntent = PendingIntent.getActivity (contesto, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); Visualizzazioni RemoteViews = new RemoteViews (context.getPackageName (), R.layout.my_test_widget); views.setOnClickPendingIntent (R.id.my_test_widget_button_1, pendingIntent);
Matthias Luh,

69

prima 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

Metodo migliore ...

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 

/// il modo più breve per ricevere i dati ..

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

// Questo richiede api 12. // il secondo parametro è facoltativo. Se keyName è null, utilizzare defaultkeycome dati.


18

Questo è quello che ho usato, speriamo che aiuti qualcuno .. semplice e affettivo.

invia i dati

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

ottenere dati

    int mealId;

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

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

Saluti!


1
Devo ancora ricordare a me stesso, di tanto in tanto, come è stato fatto correttamente .. lol!
Sindri Þór,

10

È molto facile da implementare intentin Android .. Ti ci vuole per passare da un'attività all'altra, abbiamo due metodi putExtra();e getExtra();ora ti sto mostrando l'esempio ..

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

Ora dobbiamo ottenere il valore dal AnyKeyNameparametro, il codice sotto menzionato aiuterà a farlo

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

Possiamo facilmente impostare il valore di ricezione da Intent, ovunque ci sia richiesto.


6

Un piccolo addendum: non devi creare il tuo nome per la chiave, Android fornisce questi, f.ex. Intent.EXTRA_TEXT. Modifica della risposta accettata:

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

Quindi, per recuperare il valore, provare qualcosa del tipo:

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

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

Aggiornamento in classe Intent .

  • Utilizzare hasExtra()per verificare se l'intento ha dati sulla chiave.
  • Puoi usarlo ora getStringExtra()direttamente.

Passa i dati

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

Ottieni dati

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

Inserisci sempre le chiavi nelle costanti come best practice.

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

Perché PutExtraConstantsun'interfaccia?
Big_Chair

@Big_Chair Perché PutExtraConstantsclasse contiene solo le costanti ( public, static, final). Quindi è meglio usare l'interfaccia per Costanti.
Khemraj,

3

Più semplice

lato mittente

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

lato ricevitore

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

3

Inserisci stringa nell'oggetto intento

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

NextAcitvity nel metodo onCreate ottiene String

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

questo è un metodo semplice e breve


2

Spedire

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

ottenere

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

1

mettere la funzione

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

Push Data

import android.content.Intent;

    ...

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

Il codice sopra potrebbe essere all'interno del principale activity. " MyActivity.class" è il secondo Activityche vogliamo lanciare; deve essere esplicitamente incluso nel tuo AndroidManifest.xmlfile.

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

Pull Data

import android.os.Bundle;

    ...

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

In questo esempio, il codice sopra sarebbe all'interno del tuo MyActivity.javafile.

Trabocchetti

Questo metodo può solo passare strings. Quindi diciamo che devi passare un ArrayListal tuoListActivity ; una possibile soluzione alternativa è passare una stringa separata da virgola e quindi dividerla sull'altro lato.

Soluzioni alternative

Uso SharedPreferences


e se volessi passare una stringa da string.xml?
HB.

1

Semplice, nella prima attività

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

Nella seconda attività

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

Se lo desideri, puoi aggiungere le condizioni if ​​/ else.


1

A FirstScreen.java

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

A SecondScreen.java

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

Benvenuti in SO! Modifica la tua risposta ed elabora un po 'perché e come risolve il problema. Per maggiori indicazioni, vedi stackoverflow.com/help/how-to-answer
B - Rian

0

metti prima la stringa

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

recuperalo dopo quello

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

È tutto ;)


-1

Puoi semplicemente usare la variabile statica per memorizzare la stringa del tuo edittext e quindi usare quella variabile nell'altra classe. Spero che questo risolva il tuo problema


È possibile , ma non si deve :-)
Blundell
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.