Verwendung von putExtra () und getExtra () für Zeichenfolgendaten


318

Kann mir bitte jemand sagen, wie genau getExtra()und in welcher putExtra()Absicht zu verwenden ist? Eigentlich habe ich eine String-Variable, sagen wir str, die einige String-Daten speichert. Jetzt möchte ich diese Daten von einer Aktivität an eine andere Aktivität senden.

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

und dann in der 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 
        }

    }

Ich weiß, dass es eine sehr grundlegende Frage ist, aber leider stecke ich hier fest. Bitte helfen Sie.

Vielen Dank,

Bearbeiten: Hier ist die Zeichenfolge, die ich von einem Bildschirm auf den anderen übertragen möchte, dynamisch. Das heißt, ich habe einen editText, in dem ich Zeichenfolgen unabhängig von den Benutzertypen erhalte. Dann mit Hilfe von myEditText.getText().toString(). Ich erhalte den eingegebenen Wert als Zeichenfolge, dann muss ich diese Daten übergeben.


i.putExtra (strName, keyIdentifer); Diese Anweisung hat die Variable strName, während bundle.getString ("strName") die Zeichenfolge "strName" hat. Seine intent.putExtra (Schlüssel, Wert) und intent.getExtras (). GetString (Schlüssel); Stellen Sie sicher, dass Sie denselben Schlüssel für put and get verwenden.
scheinen

Antworten:


416

Verwenden Sie dies, um die Datei zu "setzen" ...

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

Um den Wert abzurufen, versuchen Sie Folgendes:

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
Wird der Code "savedInstanceState ..." und "... getSerialiable" verwendet, um Orientierungsänderungen zu verarbeiten? Wenn nein, wofür wird dieser Code verwendet?
AJW

Ich benutze Android 3.0.1 und ich musste verwenden this.getActivity().getIntent().getExtras().
Tyler

Wenn Sie PendingIntents verwenden, müssen Sie das Flag "PendingIntent.FLAG_UPDATE_CURRENT" verwenden: stackoverflow.com/a/29846408/2738240 Intent intent = new Intent (context, MainActivity.class); intent.putExtra ("button_id", 1); PendingIntent pendingIntent = PendingIntent.getActivity (Kontext, 0, Absicht, PendingIntent.FLAG_UPDATE_CURRENT); RemoteViews-Ansichten = neue RemoteViews (context.getPackageName (), R.layout.my_test_widget); views.setOnClickPendingIntent (R.id.my_test_widget_button_1, pendingIntent);
Matthias Luh

69

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

Zweiter 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

Beste Methode ...

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

Empfangsaktivität

 Bundle extras = intent.getExtras();
    if(extras != null)
    String data = extras.getString("keyName"); // retrieve the data using keyName 

/// kürzester Weg um Daten zu empfangen ..

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

// Dies erfordert API 12. // Der zweite Parameter ist optional. Wenn keyName null ist, verwenden Sie defaultkeyas as data.


18

Dies ist, was ich verwendet habe, hoffentlich hilft es jemandem .. einfach und affektiv.

Daten senden

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

Daten empfangen

    int mealId;

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

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

Prost!


1
Ich muss mich immer noch hin und wieder daran erinnern, wie das richtig gemacht wurde .. lol!
Sindri Þór

10

Es ist sehr einfach zu implementieren intentin Android .. Es Sie von einer Aktivität auf eine andere Tätigkeit zu bewegen braucht, haben wir zwei Verfahren putExtra();und getExtra();jetzt Sie ich das Beispiel zeige , ..

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

Jetzt müssen wir den Wert aus dem AnyKeyNameParameter abrufen. Der unten angegebene Code hilft dabei

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

Wir können den Empfangswert einfach von jedem Ort aus einstellen, an dem Intentwir ihn benötigen.


6

Ein kleiner Nachtrag: Sie müssen keinen eigenen Namen für den Schlüssel erstellen, Android stellt diese bereit, z. Intent.EXTRA_TEXT. Ändern der akzeptierten Antwort:

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

Um den Wert abzurufen, versuchen Sie Folgendes:

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

Update in der Intent- Klasse.

  • Verwenden Sie diese Option, hasExtra()um zu überprüfen, ob die Absicht Daten zum Schlüssel enthält.
  • Sie können jetzt getStringExtra()direkt verwenden.

Daten übergeben

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

Daten empfangen

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

Fügen Sie als Best Practice immer Schlüssel in Konstanten ein.

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

Warum ist PutExtraConstantseine Schnittstelle?
Big_Chair

@Big_Chair Weil PutExtraConstantsKlasse enthält nur Konstanten ( public, static, final). Daher ist es besser, die Schnittstelle für Konstanten zu verwenden.
Khemraj

3

Einfacher

Absenderseite

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

Empfängerseite

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

3

String in Intent Object einfügen

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

NextAcitvity in der onCreate-Methode ruft String ab

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

Das ist eine einfache und kurze Methode


2

senden

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

erhalten

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

1

Funktion setzen

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

Daten pushen

import android.content.Intent;

    ...

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

Der obige Code befindet sich möglicherweise im Hauptcode activity. " MyActivity.class" ist die Sekunde, die Activitywir starten wollen; Es muss explizit in Ihrer AndroidManifest.xmlDatei enthalten sein.

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

Daten ziehen

import android.os.Bundle;

    ...

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

In diesem Beispiel befindet sich der obige Code in Ihrer MyActivity.javaDatei.

Fallstricke

Diese Methode kann nur bestehen strings. Nehmen wir also an, Sie müssen eine ArrayListan Ihre weitergeben ListActivity. Eine mögliche Problemumgehung besteht darin, eine durch Kommas getrennte Zeichenfolge zu übergeben und sie dann auf der anderen Seite zu teilen.

Alternativlösungen

Verwenden SharedPreferences


und was ist, wenn ich einen String aus string.xml übergeben möchte?
HB.

1

Einfach, in der ersten Aktivität

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

In der zweiten Aktivität-

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

Sie können if / else-Bedingungen hinzufügen, wenn Sie möchten.


1

Bei FirstScreen.java

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

Bei SecondScreen.java

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

Willkommen bei SO! Bitte bearbeiten Sie Ihre Antwort und erläutern Sie, warum und wie das Problem dadurch gelöst wird. Weitere Anleitungen finden Sie unter stackoverflow.com/help/how-to-answer
B - rian

0

String zuerst setzen

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

danach abrufen

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

das ist alles ;)


-1

Sie können einfach eine statische Variable verwenden, um die Zeichenfolge Ihres Edittextes zu speichern, und diese Variable dann in der anderen Klasse verwenden. Hoffe das wird dein Problem lösen


Sie können, aber Sie sollten nicht :-)
Blundell
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.