एंड्रॉइड एप्लिकेशन में "बंडल" क्या है


जवाबों:


278

बंडल आमतौर पर विभिन्न एंड्रॉइड गतिविधियों के बीच डेटा पास करने के लिए उपयोग किया जाता है। यह आप पर निर्भर करता है कि आप किस प्रकार के मूल्यों को पास करना चाहते हैं, लेकिन बंडल सभी प्रकार के मूल्यों को पकड़ सकते हैं और उन्हें नई गतिविधि में पास कर सकते हैं।

आप इसे इस तरह से उपयोग कर सकते हैं:

Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);  
startActivity(intent);

आप निम्न मान प्राप्त कर सकते हैं:

Bundle extras = intent.getExtras(); 
String tmp = extras.getString("myKey");

आप अधिक जानकारी यहां पा सकते हैं:


3
क्यों नहीं सीधे System.object और कास्ट का उपयोग करें?
lovespring

78

गतिविधियों के बीच डेटा पास का उपयोग करके Bundleऔर Intentवस्तुओं।


आपका पहला एक Bundleऑब्जेक्ट बनाते हैं

Bundle b = new Bundle();

फिर, anystringबंडल कुंजी के साथ संग्रहीत स्ट्रिंग डेटा को संबद्ध करें"myname"

b.putString("myname", anystring);

अब, एक Intentऑब्जेक्ट बनाएँ

Intent in = new Intent(getApplicationContext(), secondActivity.class);

bआशय के लिए बंडल वस्तु पास करें

in.putExtras(b);

और दूसरी गतिविधि शुरू करें

startActivity(in);

दूसरी गतिविधि में, हमें पहली गतिविधि से पारित डेटा का उपयोग करना होगा

Intent in = getIntent();

अब, आपको बंडल से डेटा प्राप्त करने की आवश्यकता है

Bundle b = in.getExtras();

अंत में, कुंजी नाम के साथ जुड़े स्ट्रिंग डेटा का मूल्य प्राप्त करें "myname"

String s = b.getString("myname");

यह वास्तव में बहुत अच्छा जवाब है, इस के लिए धन्यवाद।
अभिषेक गर्ग

67

मुझे यह जोड़ना है कि बंडल का उपयोग भविष्य में स्वयं को डेटा पास करने के लिए गतिविधियों द्वारा किया जाता है।

जब स्क्रीन घूमती है, या जब कोई अन्य गतिविधि शुरू होती है, तो विधि protected void onSaveInstanceState(Bundle outState)को लागू किया जाता है, और गतिविधि नष्ट हो जाती है। बाद में, गतिविधि का एक और उदाहरण बनाया जाता है, और public void onCreate(Bundle savedInstanceState)कहा जाता है। जब गतिविधि का पहला उदाहरण बनाया जाता है, तो बंडल अशक्त होता है; और यदि बंडल अशक्त नहीं है, तो गतिविधि अपने पूर्ववर्ती द्वारा शुरू किए गए कुछ व्यवसाय को जारी रखती है।

एंड्रॉइड स्वचालित रूप से टेक्स्ट फ़ील्ड में पाठ को बचाता है, लेकिन यह सब कुछ नहीं बचाता है, और सूक्ष्म बग कभी-कभी दिखाई देते हैं।

सबसे आम विरोधी पैटर्न, हालांकि, यह मानकर चल रहा है कि onCreate()सिर्फ प्रारंभिककरण है। यह गलत है, क्योंकि इसे राज्य को भी बहाल करना होगा।

इस "री-क्रिएट एक्टिविटी ऑन रोटेशन" व्यवहार को अक्षम करने का एक विकल्प है, लेकिन यह पुनरारंभ से संबंधित बग को नहीं रोकेगा, यह सिर्फ उनका उल्लेख करना अधिक कठिन बना देगा।

ध्यान दें कि एकमात्र तरीका जिसकी कॉल की गारंटी है जब गतिविधि नष्ट होने वाली है onPause()। (डॉक्स में गतिविधि जीवन चक्र ग्राफ देखें।)


अगर हम सिर्फ एक मैपिंग का उपयोग कर सकते हैं तो बंडल का उपयोग क्यों करें? धन्यवाद टेड!
रुचिर बैरोनिया

4
बंडल केवल गतिविधि द्वारा उपयोग नहीं किया जाता है। इसका उपयोग फ्रैगमेंट द्वारा घूमने के बाद राज्यों को संरक्षित करने के लिए भी किया जाता है।
काई वांग

47

A Bundleजावा Mapऑब्जेक्ट की तरह है जो Stringमानों के लिए मैप करता है। इसका उपयोग गतिविधियों और अन्य एप्लिकेशन घटकों के बीच जानकारी पारित करने के लिए किया जाता है। इसका उपयोग राज्य सूचना को पकड़ने और पुनर्स्थापित करने के लिए ढांचे द्वारा भी किया जाता है।

एंड्रॉइड इसके लिए सादे पुरानी Mapवस्तुओं का उपयोग नहीं करता है, Mapयह बहुत लचीला है; इसमें ऑब्जेक्ट्स (जैसे, कहते हैं, I / O स्ट्रीम) शामिल हो सकते हैं जिन्हें क्रमबद्ध नहीं किया जा सकता है। Bundleएपीआई वस्तुओं है कि इस तरह से कि बंडल की सामग्री serializable होने की गारंटी कर रहे हैं में एक बंडल में जोड़ा जा सकता के प्रकार को प्रतिबंधित करता है। एंड्रॉइड फ्रेमवर्क इस संपत्ति पर निर्भर करता है।

मेरा सुझाव है कि आप एप्लिकेशन फंडामेंटल पर प्रलेखन पढ़ें । यह बताता है कि अन्य बातों के अलावा, बंडलों और इरादे क्या हैं और उनका उपयोग किस लिए किया जाता है।


14

इरादों के माध्यम से एक गतिविधि से दूसरी गतिविधि तक मनमाना डेटा भेजने के लिए बंडलों का उपयोग किया जा सकता है। जब आप एक इरादे का प्रसारण करते हैं, तो इच्छुक गतिविधियाँ (और अन्य ब्रॉडकास्टरेसीवर्स) को इसकी सूचना दी जाएगी। एक आशय में एक बंडल हो सकता है ताकि आप आशय के साथ अतिरिक्त डेटा भेज सकें।

बंडल कुंजी-मूल्य मैपिंग हैं, इसलिए एक तरह से वे हैश की तरह हैं, लेकिन वे कड़ाई से एकल स्ट्रिंग / फू ऑब्जेक्ट मैपिंग तक सीमित नहीं हैं। ध्यान दें कि केवल कुछ डेटा प्रकारों को "पार्सलेबल" माना जाता है और उन्हें बंडल एपीआई में स्पष्ट रूप से लिखा जाता है।


यह अब तक का एकमात्र उत्तर है जो वास्तव में ओपी के सवाल का जवाब देता है, यानी एक बंडल क्या है। stackoverflow.com/a/6236801/1588163 अधिक जानकारी देता है।
क्लैप्स

अगर हम सिर्फ एक मैपिंग का उपयोग कर सकते हैं तो बंडल का उपयोग क्यों करें? धन्यवाद!
रुचिर बैरोनिया

@RuchirBaronia एक बंडल का उपयोग करने के लिए कोई विशेष कारण नहीं है जब तक कि आप इसे एंड्रॉइड एपीआई के उस हिस्से को पारित करने का इरादा नहीं रखते हैं जो बंडल ऑब्जेक्ट्स को चलाता है।
स्क्रिप्टलेप्स

8

बस एक बंडल बनाएं,


Bundle simple_bundle=new Bundle();
simple_bundle.putString("item1","value1");
Intent i=new Intent(getApplicationContext(),this_is_the_next_class.class);
i.putExtras(simple_bundle);
startActivity(i);

"This_is_the_next_class.class" में

आप इस तरह से आइटम पुनः प्राप्त कर सकते हैं।

Intent receive_i=getIntent();
Bundle my_bundle_received=receive_i.getExtras();
my_bundle_received.get("item1");
Log.d("Value","--"+my_bundle_received.get("item1").toString);

5

बंडल का उपयोग गतिविधियों के बीच डेटा पारित करने के लिए किया जाता है। आप एक बंडल बना सकते हैं, इसे इंटेंट को पास कर सकते हैं जो गतिविधि शुरू करता है जो तब गंतव्य गतिविधि से उपयोग किया जा सकता है।


3

बंडल: - स्ट्रिंग मानों से विभिन्न पार्सलेबल प्रकारों की मैपिंग।

आमतौर पर एंड्रॉइड की विभिन्न गतिविधियों के बीच डेटा पास करने के लिए बंडल का उपयोग किया जाता है।

जब हम onPause () को onStop () और फिर रिवर्स ऑर्डर onStop () से onPause () कहते हैं।

पिछले राज्य को पुनर्स्थापित करने के लिए सिस्टम द्वारा उपयोग किए गए सहेजे गए डेटा को "इंस्टेंस स्टेट" कहा जाता है और एक बंडल ऑब्जेक्ट में संग्रहीत की-वैल्यू जोड़े का एक संग्रह है।


एक मैपिंग, बंडल की प्रकृति है।
BollMose

2

बंडल का उपयोग गतिविधियों के बीच डेटा साझा करने के लिए, और ऑनक्रिएट () पद्धति में ऐप की स्थिति को बचाने के लिए किया जाता है ताकि ऐप को पता चल जाए कि उसे कहां रोका गया था ... मुझे आशा है कि यह मदद करता है :)


0

बंडल का उपयोग आशय वस्तु की मदद से एक गतिविधि से दूसरी गतिविधि तक डेटा भेजना; बंडल डेटा को पकड़ें जो किसी भी प्रकार का हो सकता है।

अब मैं बताता हूं कि दो गतिविधि के बीच बंडल पासिंग डेटा कैसे बनाया जाए।

चरण 1: पहली गतिविधि पर

Bundle b=new Bundle();

b.putString("mkv",anystring);

Intent in=new Intent(getApplicationContext(),secondActivity.class);

in.putExtras(b);

startActivity(in);

चरण 2: दूसरी गतिविधि पर

Intent in=getIntent();

Bundle b=in.getExtras();

String s=b.getString("mkv");

मुझे लगता है कि यह आपके लिए उपयोगी है ..........।


0

बंडल न केवल दो अलग-अलग घटकों के बीच डेटा को स्थानांतरित करने के लिए है, बल्कि अधिक महत्वपूर्ण रूप से इसका उपयोग नई गतिविधि में नष्ट होने से पहले संग्रहीत मूल्यों को पुनर्स्थापित करने के लिए किया जाता है।

जैसे कि EditTextविजेट में पाठ या स्क्रॉल की स्थिति ListView


0

पहली गतिविधि:

String food = (String)((Spinner)findViewById(R.id.food)).getSelectedItem();
RadioButton rb = (RadioButton) findViewById(R.id.rb);
Intent i = new Intent(this,secondActivity.class);
i.putExtra("food",food);
i.putExtra("rb",rb.isChecked());

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

String food = getIntent().getExtras().getString("food");
Boolean rb = getIntent().getExtras().getBoolean("rb");

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.