Dize verileri için putExtra () ve getExtra () nasıl kullanılır


318

Birisi nasıl kullanılacağı tam olarak lütfen bana getExtra()veputExtra() niyet mi? Aslında bazı dize verilerini depolayan str dize değişkeni var. Şimdi, bu verileri bir etkinlikten başka bir etkinliğe göndermek istiyorum.

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

ve sonra 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 
        }

    }

Çok temel bir soru olduğunu biliyorum ama maalesef burada takılı kalıyorum. Lütfen yardım et.

Teşekkürler,

Düzenleme: Burada bir ekrandan diğerine geçmeye çalıştığım dize dinamik. Yani ben kullanıcı türü ne olursa olsun dize alıyorum bir editText var. Sonra yardımı ile myEditText.getText().toString(). Ben girilen değeri bir dize olarak alıyorum sonra bu veri geçmek zorunda.


i.putExtra (strName, keyIdentifer); Bu ifade strName değişkeni içerirken bundle.getString ("strName") "strName" Dizesi içerir. İntent.putExtra (anahtar, değer) ve intent.getExtras (). GetString (anahtar); put ve get içinde aynı anahtarı kullandığınızdan emin olun.
seema

Yanıtlar:


416

Dosyayı "koymak" için bunu kullanın ...

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

Sonra, değeri almak için aşağıdaki gibi bir şey deneyin:

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
değişiklikleri kaydederken "saveInstanceState ..." ve "... getSerialiable" kodu kullanılıyor mu? hayır ise, bu kod ne için kullanılır?
AJW

Android 3.0.1 kullanıyorum ve kullanmak zorunda kaldım this.getActivity().getIntent().getExtras().
Tyler

PendingIntents kullanıyorsanız, "PendingIntent.FLAG_UPDATE_CURRENT" bayrağını kullanmanız gerekir: stackoverflow.com/a/29846408/2738240 Niyet niyeti = yeni Niyet (bağlam, MainActivity.class); intent.putExtra ("button_id", 1); PendingIntent pendingIntent = PendingIntent.getActivity (bağlam, 0, niyet, PendingIntent.FLAG_UPDATE_CURRENT); RemoteViews görünümleri = yeni RemoteViews (context.getPackageName (), R.layout.my_test_widget); views.setOnClickPendingIntent (R.id.my_test_widget_button_1, pendingIntent);
Matthias Luh

69

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

İkinci Ekran.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

En İyi Yöntem ...

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 

/// veri almanın en kısa yolu ..

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

// Bu api 12'yi gerektirir. // ikinci parametre isteğe bağlıdır. KeyName boşsa, defaultkeyas verileri kullanın .


18

Bu ne kullandım, umut verici bir şekilde yardımcı olur .. basit ve duygusal.

veri gönder

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

veri al

    int mealId;

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

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

şerefe!


1
Hala kendimi hatırlatmak zorundayım, şimdi ve sonra, bu nasıl düzgün yapıldı .. lol!
Sindri Sepór

10

intentAndroid'de uygulamak çok kolaydır .. Bir aktiviteden başka bir aktiviteye geçmenizi sağlar, iki yönteme ihtiyacımız var putExtra();ve getExtra();Şimdi size örnek gösteriyorum ..

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

Şimdi değeri AnyKeyNameparametreden almalıyız, aşağıda belirtilen kod bunu yapmanıza yardımcı olacaktır

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

İstediğimiz yerden alım değerini kolayca ayarlayabiliriz Intent.


6

Küçük bir zeyilname: anahtar için kendi adınızı oluşturmak zorunda değilsiniz, android bunları sağlar, f.ex. Intent.EXTRA_TEXT. Kabul edilen cevabı değiştirme:

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

Sonra, değeri almak için aşağıdaki gibi bir şey deneyin:

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

Niyet sınıfında güncelleme .

  • kullanım hasExtra()Niyetin anahtarda veri olup olmadığını kontrol etmek için .
  • Şimdi kullanabilirsiniz getStringExtra() doğrudan .

Veri Aktar

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

Veri Al

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

Anahtarları daima en iyi uygulama olarak sabitlere koyun.

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

Neden PutExtraConstantsbir arayüz?
Big_Chair

@Big_Chair için PutExtraConstantssınıf yalnızca sabitleri içerir ( public, static, final). Bu nedenle Sabitler için arayüz kullanmak daha iyidir.
Khemraj

3

Daha basit

gönderen tarafı

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

alıcı tarafı

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

3

Dizeyi Niyet Nesnesine Koy

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

OnCreate yöntemindeki NextAcitvity get String

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

bu kolay ve kısa yöntem


2

gönderme

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

almak

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

1

koyma işlevi

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 Verileri

import android.content.Intent;

    ...

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

Yukarıdaki kod ana bölümün içinde olabilir activity. " MyActivity.class" Activityfırlatmak istediğimiz ikincisidir ; açıkça AndroidManifest.xmldosyanıza eklenmelidir .

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

Veri Çekme

import android.os.Bundle;

    ...

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

Bu örnekte, yukarıdaki kod MyActivity.javadosyanızın içinde olacaktır .

Sorunlar

Bu yöntem sadece geçebilir strings. O yüzden bir geçmeleri gerekiyor diyelim ArrayListetmek seninListActivity ; olası bir çözüm, virgülle ayrılmış bir dize geçirip diğer tarafa bölmektir.

Alternatif çözümler

kullanım SharedPreferences


ve string.xml'den bir dize geçirmek istersem ne olur?
HB.

1

Basit, İlk Aktivitede

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

İkinci Faaliyette

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

İsterseniz if / else koşullarını ekleyebilirsiniz.


1

FirstScreen.java'da

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

SecondScreen.java'da

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

SO hoş geldiniz! Lütfen yanıtınızı düzenleyin ve sorunu neden ve nasıl çözdüğünü biraz açıklayın. Daha fazla yardım için bkz. Stackoverflow.com/help/how-to-answer
B - rian

0

önce dize koy

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

ondan sonra al

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

bu kadar ;)


-1

Düzenleme metninizin dizesini saklamak için statik değişkeni kullanabilir ve daha sonra bu değişkeni diğer sınıfta kullanabilirsiniz. Umarım bu probleminizi çözer


Sen can ama yapmamalısın :-)
Blundell
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.