Bagaimana cara mendapatkan data tambahan dari niat di Android?


750

Bagaimana saya bisa mengirim data dari satu aktivitas (maksud) ke yang lain?

Saya menggunakan kode ini untuk mengirim data:

Intent i=new Intent(context,SendMessage.class);
i.putExtra("id", user.getUserAccountId()+"");
i.putExtra("name", user.getUserFullName());
context.startActivity(i);

82
Catatan sisi Jawa: Tidak pernah merupakan ide yang baik untuk "meregangkan" integer seperti itu (terutama untuk tujuan contoh), dan sayangnya sering dianggap cara yang baik dan cepat untuk mengkonversi int ke string di java:, user.getUserAccountId()+""karena ini akan membuat objek yang tidak perlu untuk dikumpulkan. Pertimbangkan untuk menggunakan String.valueOf(user.getUserAccountId), atau Integer.toString(user.getUserAccountId)sebagai gantinya.
pkk

5
@ Andrew S Apakah ini bukan web? Ini adalah hasil nomor satu untuk "dapatkan data dari niat"
McGuile

@AndrewS Saya setuju dengan McGuile. Juga, pertanyaan ini telah diposting beberapa waktu yang lalu sehingga jawabannya mungkin tidak mudah ditemukan saat itu. Dan jika pertanyaan serupa belum diposting ke SO, maka itu adalah posting yang valid.
0xCursor

Jawaban:


1212

Pertama, dapatkan maksud yang telah memulai aktivitas Anda menggunakan getIntent()metode:

Intent intent = getIntent();

Jika data tambahan Anda direpresentasikan sebagai string, maka Anda dapat menggunakan intent.getStringExtra(String name)metode. Dalam kasus Anda:

String id = intent.getStringExtra("id");
String name = intent.getStringExtra("name");

6
dari mana saya bisa semua metode ini ??
Adham

46
@adham: Jika Anda berada dalam suatu aktivitas, dari dalam onCreate, Anda menelepon getIntent().getStringExtra("id");untuk mendapatkan string id
cchenes

1
Anda bisa mendapatkan maksud yang memulai aktivitas Anda dengan memanggil getIntent()metode. Saya sudah memperbarui jawabannya.
Malcolm

1
@Eatlon Jika Anda memiliki masalah dengan perpustakaan tertentu, Anda harus membuat pertanyaan terpisah tentang itu.
Malcolm

1
@MelColm apa perbedaan antara getExtra (). GetString dan getStringExtra ()?
Amit Tripathi

188

Dalam kegiatan menerima

Bundle extras = getIntent().getExtras(); 
String userName;

if (extras != null) {
    userName = extras.getString("name");
    // and get whatever type user account id is
}

6
Mengapa ini lebih disukai daripadagetStringExtra?
IgorGanapolsky

6
Dugaan saya adalah: jika ekstra bisa null, seluruh pengambilan ekstra dapat dilewati. Dengan menggunakan getStringExtra, Anda pada dasarnya mengubahnya menjadi serangkaian if(extras != null) { return extras.getString(name) }. Satu untuk setiap getStringExtrapanggilan Anda. Opsi ini akan memeriksa nullsekali dan jika demikian, tidak akan repot membaca Bundlesama sekali. Selain itu, getStringExtramungkin akan terus bertanya secara getExtrasinternal setiap kali juga. Jadi, Anda memiliki lebih banyak panggilan ke fungsi.
Daniël Sonck

39
//  How to send value using intent from one class to another class
//  class A(which will send data)
    Intent theIntent = new Intent(this, B.class);
    theIntent.putExtra("name", john);
    startActivity(theIntent);
//  How to get these values in another class
//  Class B
    Intent i= getIntent();
    i.getStringExtra("name");
//  if you log here i than you will get the value of i i.e. john

31

Add-up

Setel Data

String value = "Hello World!";
Intent intent = new Intent(getApplicationContext(), NewActivity.class);
intent.putExtra("sample_name", value);
startActivity(intent);

Dapatkan Data

String value;
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
    value = bundle.getString("sample_name");
}

17

Alih-alih menginisialisasi Intent baru lain untuk menerima data, lakukan saja ini:

String id = getIntent().getStringExtra("id");

11

Jika digunakan dalam FragmentActivity, coba ini:

Halaman pertama memperluas FragmentActivity

Intent Tabdetail = new Intent(getApplicationContext(), ReceivePage.class);
Tabdetail.putExtra("Marker", marker.getTitle().toString());
startActivity(Tabdetail);

Dalam fragmen, Anda hanya perlu menelepon getActivity()dulu,

Halaman kedua memperluas Fragmen :

String receive = getActivity().getIntent().getExtras().getString("name");

1
Anda juga bisa menggunakan getStringExtra ("name") alih-alih getExtras (). GetString ("name")
Plot

7

Jika Anda mencoba untuk mendapatkan data tambahan dalam fragmen, maka Anda dapat mencoba menggunakan:

Tempatkan data menggunakan:

Bundle args = new Bundle();
args.putInt(DummySectionFragment.ARG_SECTION_NUMBER);

Dapatkan data menggunakan:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


  getArguments().getInt(ARG_SECTION_NUMBER);
  getArguments().getString(ARG_SECTION_STRING);
  getArguments().getBoolean(ARG_SECTION_BOOL);
  getArguments().getChar(ARG_SECTION_CHAR);
  getArguments().getByte(ARG_SECTION_DATA);

}

6

Anda bisa mendapatkan semua jenis data tambahan dari niat , tidak peduli apakah itu objek atau string atau jenis data apa pun.

Bundle extra = getIntent().getExtras();

if (extra != null){
    String str1 = (String) extra.get("obj"); // get a object

    String str2 =  extra.getString("string"); //get a string
}

dan solusi terpendek adalah:

Boolean isGranted = getIntent().getBooleanExtra("tag", false);

4

** Masukkan Data dengan Niat - **

 Intent intent = new Intent(mContext, HomeWorkReportActivity.class);
            intent.putExtra("subjectName","Maths");
            intent.putExtra("instituteId",22);
            mContext.startActivity(intent);

** Dapatkan Data dengan Niat - **

  String subName = getIntent().getStringExtra("subjectName");
  int insId  getIntent().getIntExtra("instituteId",0);

jika kami mengirim nilai Integer berdasarkan Intent. ketika kita harus menggunakan 2 Parameter 0 di getIntent (). getIntExtra ("instituteId", 0) kalau tidak kita tidak menggunakan 0 maka android beri saya kesalahan.


2

Kotlin

Aktivitas pertama

val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("key", "value")
startActivity(intent)

Aktivitas kedua

val value = getIntent().getStringExtra("key")

Saran

Selalu masukkan kunci dalam file konstan untuk cara yang lebih terkelola.

companion object {
    val PUT_EXTRA_USER = "PUT_EXTRA_USER"
}

1

Hanya sebuah saran:

Alih-alih menggunakan "id" atau "nama" di i.putExtra ("id" .....) Anda, saya sarankan, ketika masuk akal, menggunakan bidang standar saat ini yang dapat digunakan dengan putExtra (), yaitu Intent.EXTRA_something.

Daftar lengkap dapat ditemukan di Intent (Pengembang Android).


1

Kita dapat melakukannya dengan cara sederhana:

Dalam FirstActivity:

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("uid", uid.toString());
intent.putExtra("pwd", pwd.toString());
startActivity(intent);

Dalam SecondActivity:

    try {
        Intent intent = getIntent();

        String uid = intent.getStringExtra("uid");
        String pwd = intent.getStringExtra("pwd");

    } catch (Exception e) {
        e.printStackTrace();
        Log.e("getStringExtra_EX", e + "");
    }

1

Sampaikan maksud dengan nilai pada Aktivitas Pertama:

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("uid", uid.toString());
intent.putExtra("pwd", pwd.toString());
startActivity(intent);

Terima niat untuk Aktivitas kedua; -

Intent intent = getIntent();
String user = intent.getStringExtra("uid");
String pass = intent.getStringExtra("pwd");

Kami biasanya menggunakan dua metode untuk mengirim nilainya dan mendapatkan nilainya. Untuk mengirimkan nilai yang akan kita gunakan intent.putExtra("key", Value);dan selama menerima berniat kegiatan lain yang akan kita gunakan intent.getStringExtra("key");untuk mendapatkan data maksud sebagai Stringatau menggunakan beberapa metode lain yang tersedia untuk mendapatkan jenis data ( Integer, Boolean, dll). Kuncinya mungkin kata kunci apa pun untuk mengidentifikasi nilai berarti nilai apa yang Anda bagikan. Semoga ini akan berhasil untuk Anda.


0

Anda juga dapat melakukannya seperti ini
// memberi nilai pada niat

    Intent in = new Intent(MainActivity.this, Booked.class);
    in.putExtra("filter", "Booked");
    startActivity(in);

// dapatkan nilai dari niat

    Intent intent = getIntent();
    Bundle bundle = intent.getExtras();
    String filter = bundle.getString("filter");

0

Mendapatkan Berbagai Jenis Ekstra dari Intent

Untuk mengakses data dari Intent, Anda harus mengetahui dua hal.

  • KUNCI
  • Jenis data dari data Anda.

Ada metode yang berbeda di kelas Intent untuk mengekstraksi berbagai jenis tipe data. Ini terlihat seperti ini

getIntent (). XXXX (KEY) atau intent.XXX (KEY);


Jadi jika Anda tahu tipe data varibale Anda yang Anda atur di otherActivity Anda dapat menggunakan metode masing-masing.

Contoh untuk mengambil String di Aktivitas Anda dari Intent

String profileName = getIntent().getStringExtra("SomeKey");

Daftar berbagai varian metode untuk tipe data yang berbeda

Anda dapat melihat daftar metode yang tersedia di Dokumentasi Intent Resmi .


0

Ini untuk adaptor, untuk aktivitas Anda hanya perlu mengubah mContext ke nama Activty Anda dan untuk fragmen Anda perlu mengubah mContext untuk mendapatkanActivity ()

 public static ArrayList<String> tags_array ;// static array list if you want to pass array data

      public void sendDataBundle(){
            tags_array = new ArrayList();
            tags_array.add("hashtag");//few array data
            tags_array.add("selling");
            tags_array.add("cityname");
            tags_array.add("more");
            tags_array.add("mobile");
            tags_array.add("android");
            tags_array.add("dress");
            Intent su = new Intent(mContext, ViewItemActivity.class);
            Bundle bun1 = new Bundle();
            bun1.putString("product_title","My Product Titile");
            bun1.putString("product_description", "My Product Discription");
            bun1.putString("category", "Product Category");
            bun1.putStringArrayList("hashtag", tags_array);//to pass array list 
            su.putExtras(bun1);
            mContext.startActivity(su);
        }

-2

Saya baru saja mengirim jawaban di sini yang mencakup topik ini sedikit lebih detail, termasuk beberapa alternatif.

Ini menggunakan Vapor API , kerangka kerja Android yang terinspirasi jQuery baru yang saya tulis untuk menyederhanakan pengembang Android. Lihat contoh dalam jawaban itu untuk bagaimana Anda dapat dengan mudah mengirimkan data di antara aktivitas.

Itu juga menunjukkan VaporIntent, yang memungkinkan Anda untuk melakukan panggilan metode dan memanfaatkan .put(...)metode kelebihan beban :

$.Intent().put("data", "myData").put("more", 568)...

Anda dapat dengan mudah mengirimkan data ke seluruh aplikasi Anda menggunakan Vapor API , jadi semoga akan membantu Anda dan orang lain selama pengembangan aplikasi.


1
Saya telah melihat beberapa jawaban Anda tentang Vapor API. Sangat menarik. Bagaimana Anda mendapatkan data tersebut (seperti Intent.getextras ()) ??
Kalai.G

Lihat ini , ini menjelaskan cara mengambil ekstra Intent. Lebih detail ada di sini . Apakah itu membantu?
Darius

2
Saya pikir metode chaining memiliki terlalu banyak overhead. Jika Anda memanggil metode apa pun yang mengembalikan "ini" hanya agar tidak dapat ditembus (yaitu "setter") itu melanggar prinsip-prinsip desain OOP. Saya suka kesederhanaannya, tetapi debugging mungkin juga menyebalkan jika Anda memiliki rangkaian metode. Saya melihat nilai di API, saya hanya tidak setuju dengan metode chaining.
nckbrz
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.