Jak używać putExtra () i getExtra () dla danych łańcuchowych

318

Czy ktoś może mi powiedzieć, jak dokładnie używać getExtra()i putExtra()do celów? Właściwie mam zmienną łańcuchową, powiedzmy str, która przechowuje niektóre dane łańcuchowe. Teraz chcę wysłać te dane z jednego działania do drugiego.

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

a następnie w 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 
        }

    }

Wiem, że to bardzo podstawowe pytanie, ale niestety utknąłem tutaj. Proszę pomóż.

Dzięki,

Edycja: Tutaj ciąg, który próbuję przekazać z jednego ekranu na drugi, jest dynamiczny. To znaczy, że mam editText, w którym otrzymuję ciąg niezależnie od typu użytkownika. Następnie z pomocą myEditText.getText().toString(). Otrzymuję wprowadzoną wartość jako ciąg, a następnie muszę przekazać te dane.

Shaista Naaz
źródło
i.putExtra (strName, keyIdentifer); Ta instrukcja ma zmienną strName, a bundle.getString („strName”) ma ciąg „strName”. Jego intent.putExtra (klucz, wartość) i intent.getExtras (). GetString (klucz); upewnij się, że używasz tego samego klucza w zestawie i weź.
wydają się

Odpowiedzi:

416

Użyj tego, aby „umieścić” plik ...

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

Następnie, aby pobrać wartość, spróbuj czegoś takiego:

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
źródło
10
czy kod „saveInstanceState ...” i „... getSerialiable” jest używany do obsługi zmian orientacji? jeśli nie, do czego służy ten kod?
AJW,
Używam Androida 3.0.1 i musiałem użyć this.getActivity().getIntent().getExtras().
Tyler,
Jeśli używasz PendingIntents, musisz użyć flagi „PendingIntent.FLAG_UPDATE_CURRENT”: stackoverflow.com/a/29846408/2738240 Intent intent = nowy Intent (kontekst, MainActivity.class); intent.putExtra („button_id”, 1); PendingIntent pendingIntent = PendingIntent.getActivity (kontekst, 0, zamiar, PendingIntent.FLAG_UPDATE_CURRENT); Widoki RemoteViews = nowe RemoteViews (context.getPackageName (), R.layout.my_test_widget); views.setOnClickPendingIntent (R.id.my_test_widget_button_1, pendingIntent);
Matthias Luh
69

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

Drugi 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
źródło
52

Najlepsza metoda ...

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 

/// najkrótszy sposób na uzyskanie danych ..

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

// Wymaga interfejsu API 12. // drugi parametr jest opcjonalny. Jeśli nazwa_klucza jest pusta, użyj defaultkeydanych jako.

Zar E Ahmer
źródło
18

To jest to, z czego korzystam, mam nadzieję, że pomaga komuś .. prosty i uczuciowy.

Wyślij dane

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

otrzymać dane

    int mealId;

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

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

Twoje zdrowie!

Sindri Þór
źródło
1
Wciąż muszę od czasu do czasu przypominać sobie, jak to zrobiono poprawnie .. lol!
Sindri Þór
10

Jest bardzo łatwy do wdrożenia intentw Androidzie .. Przeniesienie z jednej aktywności do innej aktywności, mamy dwie metody, putExtra();a getExtra();teraz pokazuję wam przykład ..

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

Teraz musimy uzyskać wartość z AnyKeyNameparametru, pomoże w tym poniższy kod

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

Możemy łatwo ustawić wartość odbiorczą z Intentdowolnego miejsca.

عاقب انصاری
źródło
6

Mały dodatek: nie musisz tworzyć własnej nazwy dla klucza, android zapewnia je, np. Intent.EXTRA_TEXT. Modyfikacja zaakceptowanej odpowiedzi:

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

Następnie, aby pobrać wartość, spróbuj czegoś takiego:

String newString;
Bundle extras = getIntent().getExtras();
if(extras == null) {
    newString= null;
} else {
    newString= extras.getString(Intent.EXTRA_TEXT);
}
serv-inc
źródło
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
źródło
4

Aktualizacja w klasie Intent .

  • Służy hasExtra()do sprawdzania, czy zamiar ma dane na kluczu.
  • Możesz teraz użyć getStringExtra()bezpośrednio.

Przekaż dane

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

Otrzymać dane

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

Zawsze umieszczaj klucze w stałych jako najlepszą praktykę.

public interface PutExtraConstants {
    String USER_NAME = "USER_NAME";
}
Khemraj
źródło
Dlaczego PutExtraConstantsinterfejs?
Big_Chair
@Big_Chair Ponieważ PutExtraConstantsklasa zawiera tylko stałe ( public, static, final). Dlatego lepiej jest używać interfejsu dla stałych.
Khemraj
3

Prościej

strona nadawcy

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

strona odbiornika

Intent i = new Intent(SourceActiviti.this,TargetActivity.class);
String strData = i.getStringExtra("id");
David Untama
źródło
3

Umieść ciąg w obiekcie docelowym

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

NextAcitvity w metodzie onCreate otrzymuje String

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

to łatwa i krótka metoda

kamaljeet Singh
źródło
2

wysłać

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

dostać

String myData = getIntent.getStringExtra("key");
H.Fa8
źródło
1

funkcja wprowadzania

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
źródło
1

Dane push

import android.content.Intent;

    ...

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

Powyższy kod może znajdować się w głównym activity. „ MyActivity.class” to sekunda, Activityktórą chcemy uruchomić; musi być wyraźnie dołączony do twojego AndroidManifest.xmlpliku.

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

Wyciągnij dane

import android.os.Bundle;

    ...

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

W tym przykładzie powyższy kod będzie w twoim MyActivity.java pliku.

Gotchas

Ta metoda może tylko przejść strings. Powiedzmy, że musisz przekazać ArrayListswojemuListActivity ; możliwym obejściem jest przekazanie ciągu rozdzielanego przecinkami, a następnie podzielenie go na drugą stronę.

Alternatywne rozwiązania

Posługiwać się SharedPreferences

Habeeb Rahman kalathil
źródło
a co jeśli chcę przekazać ciąg z pliku string.xml?
HB.
1

Proste, w pierwszej aktywności

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

W drugim ćwiczeniu

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

Możesz dodać warunki if / else, jeśli chcesz.

Srinivas Nallapu
źródło
1

Na FirstScreen.java

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

Na SecondScreen.java

    String keyIdentifier;
    if (savedInstanceState != null)
        keyIdentifier= (String) savedInstanceState.getSerializable(strName);
    else
        keyIdentifier = getIntent().getExtras().getString(strName);
Shaheen Ahamed S.
źródło
Witamy w SO! Edytuj swoją odpowiedź i wyjaśnij, dlaczego i jak to rozwiązuje problem. Aby uzyskać więcej wskazówek, zobacz stackoverflow.com/help/how-to-answer
B - rian
0

umieść ciąg na pierwszym miejscu

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

odzyskaj to potem

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

to wszystko ;)

nieśmiały
źródło
-1

Możesz po prostu użyć zmiennej statycznej, aby zapisać ciąg tekstu edittext, a następnie użyć tej zmiennej w innej klasie. Mam nadzieję, że to rozwiąże twój problem

Adithya MPN
źródło
Państwo może , ale nie należy :-)
Blundell