मुझे Android पर इरादे से अतिरिक्त डेटा कैसे मिलेगा?


749

मैं एक गतिविधि (इरादे) से दूसरे डेटा कैसे भेज सकता हूं?

मैं डेटा भेजने के लिए इस कोड का उपयोग करता हूं:

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

82
जावा की ओर ध्यान दें: पूर्णांक जैसे कि (विशेष रूप से उदाहरण के प्रयोजनों के लिए) "स्ट्रिंग" को एक अच्छा विचार नहीं है, और दुर्भाग्य से अक्सर इसे जावा में स्ट्रिंग में बदलने के लिए एक अच्छा, त्वरित तरीका माना जाता है: user.getUserAccountId()+""क्योंकि यह अनावश्यक वस्तुओं का निर्माण करेगा। इकट्ठा करने का है। उपयोग करने पर विचार करें String.valueOf(user.getUserAccountId), या Integer.toString(user.getUserAccountId)इसके बजाय।
पीके

5
@Andrew S क्या यह वेब नहीं है? यह "इरादे से डेटा प्राप्त करें" के लिए नंबर एक परिणाम है
McGuile

@ और मैं मैकगाइल के साथ सहमत हूँ। इसके अलावा, इस सवाल को कुछ समय पहले पोस्ट किया गया था, इसलिए उत्तर को वापस खोजना आसान नहीं था। और अगर एसओ को एक समान प्रश्न अभी तक पोस्ट नहीं किया गया था, तो यह एक वैध पोस्ट था।
0xCursor

जवाबों:


1211

सबसे पहले, उस इरादे को प्राप्त करें जिसने getIntent()विधि का उपयोग करके आपकी गतिविधि शुरू की है:

Intent intent = getIntent();

यदि आपके अतिरिक्त डेटा को स्ट्रिंग्स के रूप में दर्शाया जाता है, तो आप intent.getStringExtra(String name)विधि का उपयोग कर सकते हैं । आपके मामले में:

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

6
मैं यह सब विधि कहाँ से कर सकता हूँ ??
एडहैम

46
@ अधम: यदि आप एक गतिविधि में हैं, तो ऑनक्रीट के भीतर से, आप getIntent().getStringExtra("id");आईडी स्ट्रिंग प्राप्त करने के लिए कहते हैं
ccheneson

1
आप आशय प्राप्त कर सकते हैं जिसने कॉलिंग getIntent()विधि द्वारा आपकी गतिविधि शुरू की थी । मैंने जवाब अपडेट कर दिया है।
मैल्कम

1
@ एटलॉन यदि आपको किसी विशिष्ट पुस्तकालय के साथ कोई समस्या है, तो आपको उसके बारे में एक अलग प्रश्न बनाना चाहिए।
माल्कॉम

1
@MelColm getExtra ()। GetString और getStringExtra () के बीच अंतर क्या है?
अमित त्रिपाठी

188

प्राप्त करने वाली गतिविधि में

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

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

6
क्यों यह बेहतर हैgetStringExtra?
इगोरगानापोलस्की

6
मेरा अनुमान है: यदि एक्स्ट्रा कलाकार हो सकते हैं null, तो पूरे एक्सट्रैस भ्रूण को छोड़ दिया जा सकता है। उपयोग करके getStringExtra, आप मूल रूप से इसे श्रृंखला में बदलते हैं if(extras != null) { return extras.getString(name) }। प्रत्येक के लिए getStringExtraआप कॉल करें। यह विकल्प nullएक बार जांच करेगा और यदि ऐसा है, तो यह पढ़ने में बिल्कुल परेशान नहीं करेगा Bundle। इसके अलावा, getStringExtraशायद getExtrasहर बार आंतरिक रूप से भी पूछते रहेंगे । तो आप बस कार्यों के लिए और अधिक कॉल है।
दानीलाल

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

जोड़ें

डेटा सेट करें

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

डेटा प्राप्त करें

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

17

डेटा प्राप्त करने के लिए एक और नए इरादे को शुरू करने के बजाय, बस यह करें:

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

11

यदि एक FragmentActivity में उपयोग किया जाता है, तो यह प्रयास करें:

पहला पृष्ठ FragmentActivity का विस्तार करता है

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

टुकड़े में, आपको getActivity()पहले कॉल करने की आवश्यकता है ,

दूसरे पृष्ठ फैली टुकड़ा :

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

1
इसके अलावा आप getExtras () के बजाय getStringExtra ("नाम") का उपयोग कर सकते हैं। getString ("नाम")
प्लॉट

7

यदि आप टुकड़ों में अतिरिक्त डेटा प्राप्त करने की कोशिश कर रहे हैं तो आप निम्न का उपयोग कर सकते हैं:

डेटा का उपयोग कर रखें:

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

डेटा का उपयोग करें:

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

आप इरादे से किसी भी प्रकार का अतिरिक्त डेटा प्राप्त कर सकते हैं , भले ही वह वस्तु या स्ट्रिंग या किसी भी प्रकार का डेटा हो।

Bundle extra = getIntent().getExtras();

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

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

और सबसे छोटा समाधान है:

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

4

** आशय से डेटा रखो - **

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

** आशय से डेटा प्राप्त करें - **

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

अगर हम Intent द्वारा Integer value भेजते हैं । जब हमें getIntent ()। getIntExtra ("InstituteId", 0) में 2nd Parameter 0 का उपयोग करना चाहिए अन्यथा हम 0 का उपयोग नहीं करते हैं तो android मुझे त्रुटि देता है।


2

Kotlin

पहली गतिविधि

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

दूसरी गतिविधि

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

सुझाव

हमेशा अधिक प्रबंधित तरीके से निरंतर फ़ाइल में कुंजियाँ रखें।

companion object {
    val PUT_EXTRA_USER = "PUT_EXTRA_USER"
}

1

केवल एक सलाह:

आपके i.putExtra ("id" .....) में "आईडी" या "नाम" का उपयोग करने के बजाय, मैं सुझाव दूंगा, जब यह समझ में आता है, तो वर्तमान मानक क्षेत्रों का उपयोग करना जो कि putExtra (), के साथ उपयोग किया जा सकता है Intent.EXTRA_something।

Intent (Android Developers) पर पूरी सूची देखी जा सकती है ।


1

हम इसे सरल तरीकों से कर सकते हैं:

FirstActivity में:

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

सेकंडएक्टिविटी में:

    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

प्रथम गतिविधि पर मूल्य के साथ इरादा पास करें:

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

दूसरी गतिविधि पर इरादा प्राप्त करें; -

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

हम मूल्य भेजने के लिए और मूल्य प्राप्त करने के इरादे से आम तौर पर दो विधि का उपयोग करते हैं। मूल्य भेजने के लिए हम का उपयोग करेगा intent.putExtra("key", Value);और के दौरान एक और गतिविधि पर आमादा प्राप्त हम का उपयोग करेगा intent.getStringExtra("key");के रूप में आशय डेटा प्राप्त करने Stringया कुछ अन्य उपलब्ध विधि का उपयोग डेटा (के अन्य प्रकार प्राप्त करने के लिए Integer, Boolean, आदि)। मूल्य की पहचान करने के लिए कुंजी कोई भी कीवर्ड हो सकता है इसका मतलब है कि आप किस मूल्य को साझा कर रहे हैं। आशा है कि यह आपके लिए काम करेगा।


0

आप इस तरह भी कर सकते हैं
// इरादे में मूल्य डालें

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

// इरादे से मूल्य प्राप्त करें

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

0

आशय से विभिन्न प्रकार के अतिरिक्त प्राप्त करना

इंटेंट से डेटा एक्सेस करने के लिए आपको दो बातें पता होनी चाहिए।

  • चाभी
  • आपके डेटा का डेटा प्रकार।

विभिन्न प्रकार के डेटा प्रकार निकालने के लिए इंटेंट वर्ग में विभिन्न विधियाँ हैं। यह इस तरह दिख रहा है

getIntent ()। XXXX (KEY) या आशय ।XXX (KEY);


इसलिए यदि आप अपने वैरिएबल के डेटाटाइप को जानते हैं, जिसे आप अन्यता में सेट करते हैं, तो आप संबंधित विधि का उपयोग कर सकते हैं।

इरादे से अपनी गतिविधि में स्ट्रिंग को पुनः प्राप्त करने के लिए उदाहरण

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

विभिन्न डेटाटाइप के लिए विभिन्न तरीकों की सूची

आप की आधिकारिक प्रलेखन में उपलब्ध तरीकों की सूची देख सकते आशय


0

यह एडॉप्टर के लिए है, गतिविधि के लिए आपको केवल अपने सक्रियता के नाम में mContext को बदलना होगा और खंड के लिए आपको mContext को getActivity () में बदलना होगा।

 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

मैंने अभी यहाँ एक उत्तर पोस्ट किया है जो कुछ विकल्पों सहित इस विषय को थोड़ा और विस्तार से कवर करता है।

यह वाष्प एपीआई का उपयोग करता है , एक नया jQuery प्रेरित एंड्रॉइड फ्रेमवर्क जो मैंने एंड्रॉइड देव को सरल बनाने के लिए लिखा था। उस उत्तर में उदाहरण देखें कि कैसे आप आसानी से एक्टिविटीज के बीच डेटा पास कर सकते हैं।

इसके अलावा यह प्रदर्शित करता है VaporIntent, जो आपको चेन विधि कॉल और ओवरलोड .put(...)विधि का उपयोग करने देता है:

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

आप वाष्प एपीआई का उपयोग करके आसानी से अपने पूरे एप्लिकेशन के आसपास डेटा पास कर सकते हैं , इसलिए उम्मीद है कि यह ऐप विकास के दौरान आपके और अन्य लोगों के लिए उपयोगी होगा।


1
मैंने आपके कुछ उत्तरों को Vapor API के बारे में देखा था। यह दिलचस्प है। क्या आपको वे डेटा मिलते हैं (जैसे Intent.getextras ()) ??
कलई।

की जाँच करें इस , यह कैसे आशय एक्स्ट्रा कलाकार को पुनः प्राप्त करने बताते हैं। अधिक जानकारी यहाँ हैं । क्या उससे मदद हुई?
डेरियस

2
मुझे लगता है कि शाइनिंग के तरीके बहुत ज्यादा ओवरहेड हैं। यदि आप किसी भी विधि को बुला रहे हैं जो "यह" सिर्फ चेनेबल (यानी "बसने वाला") देता है तो यह ओओपी के डिजाइन सिद्धांतों का उल्लंघन है। मुझे सादगी पसंद है, लेकिन यदि आपके पास तरीकों की एक श्रृंखला है, तो डिबगिंग संभवतः एक दर्द भी हो सकता है। मुझे एपीआई में मूल्य दिखाई दे रहा है, मैं सिर्फ इस विधि के साथ सहमत नहीं हूँ।
nckbrz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.