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);
Adham
sumber
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");
Malcolm
sumber
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
}
NickT
sumber
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
Sumit Sharma
sumber
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");
}
kenju
sumber
17

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

String id = getIntent().getStringExtra("id");
r_allela
sumber
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");
Bundit Ng
sumber
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);

}
star18bit
sumber
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);
Hasib Akter
sumber
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.

Om Prakash Sharma
sumber
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"
}
Khemraj
sumber
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).

eva
sumber
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 + "");
    }
sam
sumber
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.

Pradeep Sheoran
sumber
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");
Savita Sharma
sumber
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 .

Rohit Singh
sumber
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);
        }
Android Geek
sumber
-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.

Darius
sumber
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