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.


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

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

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.


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!


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.


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

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

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

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

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


2

enviar

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

obter

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

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

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


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.


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

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


-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


Você pode, mas não deve :-)
Blundell
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.