Como usar putExtra () e getExtra () para dados de string

318

Alguém pode me dizer exatamente como usar getExtra()e putExtra()para fins? Na verdade, eu tenho uma variável de string, digamos str, que armazena alguns dados da string. Agora, quero enviar esses dados de uma atividade para outra.

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

e depois no 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 
        }

    }

Eu sei que é uma pergunta muito básica, mas infelizmente estou preso aqui. Por favor ajude.

Obrigado,

Edit: Aqui a string que estou tentando passar de uma tela para outra é dinâmica. Ou seja, eu tenho um editText onde estou obtendo string, independentemente do tipo de usuário. Então, com a ajuda de myEditText.getText().toString(). Estou recebendo o valor inserido como uma sequência, então eu tenho que passar esses dados.

Shaista Naaz
fonte
i.putExtra (strName, keyIdentifer); Essa instrução possui a variável strName, enquanto bundle.getString ("strName") possui "strName" String. Seus intent.putExtra (chave, valor) e intent.getExtras (). GetString (chave); verifique se você está usando a mesma chave no put and get.
seema 29/04

Respostas:

416

Use isso para "colocar" o arquivo ...

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

Em seguida, para recuperar o valor, tente 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
fonte
10
o código "savedInstanceState ..." e "... getSerialiable" é usado para lidar com as alterações de orientação? se não, para que esse código é usado?
AJW
Estou usando o android 3.0.1 e tive que usar this.getActivity().getIntent().getExtras().
Tyler
Se você usar PendingIntents, precisará usar o sinalizador "PendingIntent.FLAG_UPDATE_CURRENT": stackoverflow.com/a/29846408/2738240 Intent intent = new Intent (contexto, MainActivity.class); intent.putExtra ("button_id", 1); PendingIntent pendingIntent = PendingIntent.getActivity (contexto, 0, intenção, PendingIntent.FLAG_UPDATE_CURRENT); Exibições do RemoteViews = novos RemoteViews (context.getPackageName (), R.layout.my_test_widget); views.setOnClickPendingIntent (R.id.my_test_widget_button_1, pendingIntent);
Matthias Luh
69

primeiro 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
fonte
52

Melhor 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 

/// maneira mais curta de receber dados ..

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

// Isso requer a api 12. // o segundo parâmetro é opcional. Se keyName for nulo, use os defaultkeycomo dados.

Zar E Ahmer
fonte
18

Isto é o que eu tenho usado, espero que ajude alguém .. simples e afetivo.

enviar dados

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

Obter dados

    int mealId;

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

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

Felicidades!

Sindri Þór
fonte
1
Eu ainda tenho que me lembrar, de vez em quando, como isso foi feito corretamente .. lol!
Sindri
10

É muito fácil de implementar intentno Android. Leva você para passar de uma atividade para outra, temos que usar dois métodos putExtra();e getExtra();Agora estou mostrando o exemplo.

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

Agora temos que obter o valor do AnyKeyNameparâmetro, o código abaixo mencionado ajudará a fazer isso

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

Podemos definir facilmente o valor de recebimento Intent, onde quer que seja necessário.

عاقب انصاری
fonte
6

Um pequeno adendo: você não precisa criar seu próprio nome para a chave, o android fornece esses, f.ex. Intent.EXTRA_TEXT. Modificando a resposta aceita:

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

Em seguida, para recuperar o valor, tente algo como:

String newString;
Bundle extras = getIntent().getExtras();
if(extras == null) {
    newString= null;
} else {
    newString= extras.getString(Intent.EXTRA_TEXT);
}
serv-inc
fonte
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");
}
Samet ÖZTOPRAK
fonte
4

Atualização na classe Intent .

  • Use hasExtra()para verificar se a intenção possui dados na chave.
  • Você pode usar agora getStringExtra()diretamente.

Passar dados

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

Obter dados

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

Sempre coloque as chaves em constantes como prática recomendada.

public interface PutExtraConstants {
    String USER_NAME = "USER_NAME";
}
Khemraj
fonte
Por que PutExtraConstantsuma interface?
Big_Chair
Porque @Big_Chair PutExtraConstantsclasse contém apenas constantes ( public, static, final). Portanto, é melhor usar a interface para constantes.
Khemraj
3

Mais simples

lado do remetente

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

lado do receptor

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

Colocar String no Objeto de Intenção

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

NextAcitvity no método onCreate get String

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

esse é um método fácil e curto

kamaljeet Singh
fonte
2

enviar

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

obter

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

colocar função

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
fonte
1

Push Data

import android.content.Intent;

    ...

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

O código acima pode estar dentro do principal activity. " MyActivity.class" é o segundo Activityque queremos lançar; ele deve ser explicitamente incluído no seu AndroidManifest.xmlarquivo.

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

Pull Data

import android.os.Bundle;

    ...

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

Neste exemplo, o código acima estaria dentro do seu MyActivity.javaarquivo.

Pegadinhas

Este método só pode passar strings . Então, digamos que você precise passar um ArrayListpara o seu ListActivity; uma solução possível é passar uma cadeia separada por vírgula e depois dividi-la do outro lado.

Soluções alternativas

Usar SharedPreferences

Habeeb Rahman kalathil
fonte
e se eu quiser passar uma string de string.xml?
HB.
1

Simples, na primeira atividade

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

Na segunda Atividade -

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

Você pode adicionar condições if / else, se desejar.

Srinivas Nallapu
fonte
1

No FirstScreen.java

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

No SecondScreen.java

    String keyIdentifier;
    if (savedInstanceState != null)
        keyIdentifier= (String) savedInstanceState.getSerializable(strName);
    else
        keyIdentifier = getIntent().getExtras().getString(strName);
Shaheen Ahamed S
fonte
Bem-vindo ao SO! Edite sua resposta e explique um pouco o porquê e como ele resolve o problema. Para obter mais orientações, consulte stackoverflow.com/help/how-to-answer
B - rian
0

coloque a corda primeiro

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

recuperá-lo depois disso

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

Isso é tudo ;)

shyam_
fonte
-1

Você pode simplesmente usar a variável estática para armazenar a sequência do seu edittext e, em seguida, usar essa variável na outra classe. Espero que isso resolva seu problema

Adithya MPN
fonte
Você pode, mas não deve :-)
Blundell