Cara menggunakan putExtra () dan getExtra () untuk data string


318

Dapatkah seseorang tolong beri tahu saya bagaimana tepatnya menggunakan getExtra()dan putExtra()untuk niat? Sebenarnya saya punya variabel string, katakanlah str, yang menyimpan beberapa data string. Sekarang, saya ingin mengirim data ini dari satu aktivitas ke aktivitas lain.

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

dan kemudian di 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 
        }

    }

Saya tahu itu adalah pertanyaan yang sangat mendasar tetapi sayangnya saya terjebak di sini. Tolong bantu.

Terima kasih,

Sunting: Di sini string yang saya coba sampaikan dari satu layar ke layar lainnya adalah dinamis. Itu adalah saya memiliki editText di mana saya mendapatkan string apa pun jenis pengguna. Kemudian dengan bantuan myEditText.getText().toString(). Saya mendapatkan nilai yang dimasukkan sebagai string maka saya harus meneruskan data ini.


i.putExtra (strName, keyIdentifer); Pernyataan ini memiliki variabel strName sementara bundle.getString ("strName") memiliki String "strName". Intensi.putExtra (kunci, nilai), dan intent.getExtras (). GetString (kunci); pastikan Anda menggunakan kunci yang sama di put and get.
seema

Jawaban:


416

Gunakan ini untuk "meletakkan" file ...

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

Kemudian, untuk mengambil nilai coba sesuatu seperti:

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
apakah kode "SavedInstanceState ..." dan "... getSerialiable" digunakan untuk menangani perubahan orientasi? jika tidak, untuk apa kode itu digunakan?
AJW

Saya menggunakan Android 3.0.1 dan saya harus menggunakannya this.getActivity().getIntent().getExtras().
Tyler

Jika Anda menggunakan PendingIntents, Anda harus menggunakan flag "PendingIntent.FLAG_UPDATE_CURRENT": stackoverflow.com/a/29846408/2738240 Intent intent = Intent baru (konteks, MainActivity.class); intent.putExtra ("button_id", 1); PendingIntent pendingIntent = PendingIntent.getActivity (konteks, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); RemoteViews views = RemoteViews baru (context.getPackageName (), R.layout.my_test_widget); views.setOnClickPendingIntent (R.id.my_test_widget_button_1, pendingIntent);
Matthias Luh

69

Screen.java pertama

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

Screen.java kedua

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

Metode Terbaik ...

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 

/// cara terpendek untuk menerima data ..

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

// Ini membutuhkan api 12. // parameter kedua adalah opsional. Jika keyName adalah null maka gunakan defaultkeysebagai data.


18

Inilah yang telah saya gunakan, semoga membantu seseorang .. sederhana dan afektif.

kirim data

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

dapatkan data

    int mealId;

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

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

Bersulang!


1
Saya masih harus mengingatkan diri saya, sekarang dan kemudian, bagaimana ini dilakukan dengan benar .. lol!
Sindri Þór

10

Sangat mudah untuk diterapkan intentdi Android .. Anda perlu beralih dari satu aktivitas ke aktivitas lain, kita harus dua metode putExtra();dan getExtra();Sekarang saya tunjukkan contohnya kepada Anda ..

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

Sekarang kita harus mendapatkan nilai dari AnyKeyNameparameter, kode yang disebutkan di bawah ini akan membantu dalam melakukan ini

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

Kami dapat dengan mudah mengatur nilai penerimaan dari Intent, di mana pun kami membutuhkan.


6

Tambahan kecil: Anda tidak harus membuat nama Anda sendiri untuk kunci, Android menyediakan ini, f.ex. Intent.EXTRA_TEXT. Mengubah jawaban yang diterima:

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

Kemudian, untuk mengambil nilai coba sesuatu seperti:

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

Perbarui di kelas Intent .

  • Menggunakan hasExtra() untuk memeriksa apakah niat memiliki data pada kunci.
  • Anda dapat menggunakan sekarang getStringExtra()secara langsung.

Pass Data

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

Dapatkan Data

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

Selalu masukkan kunci dalam konstanta sebagai praktik terbaik.

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

Mengapa PutExtraConstantsantarmuka?
Big_Chair

@Big_Chair Karena PutExtraConstantskelas hanya berisi konstanta ( public, static, final). Jadi lebih baik menggunakan antarmuka untuk Konstanta.
Khemraj

3

Lebih simpel

sisi pengirim

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

sisi penerima

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

3

Masukkan String ke Objek Intent

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

NextAcitvity dalam metode onCreate mendapatkan String

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

itu metode yang mudah dan pendek


2

Kirim

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

Dapatkan

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

1

menempatkan fungsi

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

Dorong Data

import android.content.Intent;

    ...

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

Kode di atas mungkin berada di dalam main activity. " MyActivity.class" adalah yang kedua yang Activityingin kami luncurkan; itu harus secara eksplisit dimasukkan dalam AndroidManifest.xmlfile Anda .

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

Tarik Data

import android.os.Bundle;

    ...

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

Dalam contoh ini, kode di atas akan berada di dalam Anda MyActivity.java file .

Gotcha

Metode ini hanya bisa lewat strings. Jadi katakanlah Anda harus memberikan sebuah ArrayListkepada AndaListActivity ; solusi yang mungkin adalah untuk melewati string yang dipisahkan koma dan kemudian membaginya di sisi lain.

Solusi Alternatif

Menggunakan SharedPreferences


dan bagaimana jika saya ingin meneruskan string dari string.xml?
HB.

1

Sederhana, Kegiatan Pertama-

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

Dalam Aktivitas kedua-

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

Anda dapat menambahkan kondisi if / else jika diinginkan.


1

Di FirstScreen.java

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

Di SecondScreen.java

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

Selamat datang di SO! Harap edit jawaban Anda dan uraikan sedikit mengapa dan bagaimana pemecahannya. Untuk panduan lebih lanjut, lihat stackoverflow.com/help/how-to-answer
B - rian

0

letakkan string terlebih dahulu

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

ambil setelah itu

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

itu saja ;)


-1

Anda bisa Cukup menggunakan variabel statis untuk menyimpan string edittext Anda dan kemudian gunakan variabel itu di kelas lain. Semoga ini akan menyelesaikan masalah Anda


Anda bisa tetapi Anda tidak boleh :-)
Blundell
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.