2010-05-18 10 views
15

मैं इस कोड है लगता है। मैं एक मूल्य कैसे पास कर सकता हूं और फिर इसे वापस प्राप्त कर सकता हूं?startActivityForResult और उद्देश्य अतिरिक्त, यह एक्स्ट्रा कलाकार पीछे धकेल दिया नहीं कर रहे हैं

संपादित

मैं भी कोशिश की,

Bundle extras = data.getExtras(); // returns null 
+0

जांच resultCode Activity.RESULT_OK – Jorgesys

+0

के लिए -1 कि ठीक है होना चाहिए , अगर यह उसमें हो जाता है, लेकिन अतिरिक्त खाली है। – Pentium10

उत्तर

3

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

सौभाग्य से, resultCode पैरामीटर पूरी तरह से नियंत्रित है, जिसका अर्थ है कि आप इसका उपयोग अपने डेटा को इंडेक्स करने के लिए कर सकते हैं।

private final int PICK_CONTACT = 0; 
private Bundle[] myDataTransfer = { null }; 

... 

Bundle myData = new Bundle(); 
myData.putString(EXTRA_ONLINE_ID, (String) v.getTag()); 
myDataTransfer[PICK_CONTACT] = myData; 
// create intent and all 
startActivityForResult(intent, PICK_CONTACT); 

... 

public void onActivityResult(int reqCode, int resultCode, Intent data) { 
    if (resultCode == PICK_CONTACT) { 
     Bundle myData = myDataTransfer[resultCode]; 
     String onlineid = myData.getString(EXTRA_ONLINE_ID); 
    } 
} 

मैं एक जावा प्रोग्रामर नहीं कर रहा हूँ, वहाँ बंडल का एक नक्शा लागू करने के लिए एक अच्छा तरीका होना चाहिए, लेकिन यह काम करता है :)

+1

जब आप कोई गतिविधि शुरू करते हैं, तो आपकी गतिविधि मारे जा सकती है। तो सूचकांक चलेगा। मुझे लगता है कि आपको अपनी ऐप की स्मृति के बाहर कहीं भी बंडल को बनाए रखना होगा। – rumpel

+0

@rumpel द्वारा टिप्पणी में जोड़ने के लिए, आप सेटिंग> डेवलपर विकल्प में जाकर और "गतिविधियों को न रखें" सक्षम करके इसका परीक्षण कर सकते हैं। इस तरह आप इस उपयोगकेस का परीक्षण करने में सक्षम होंगे और यह पता लगाएंगे कि जब तक आप मैन्युअल रूप से सहेजने/पुनर्स्थापित नहीं करते हैं, तब तक myDataTransfer में डेटा मिटा दिया जाएगा। – strangetimes

0
अगर

ठीक चेक, आपके गतिविधि एंड्रॉयड: launchMode SingleTask या SingleInstance के रूप में कॉन्फ़िगर किया गया है! यह समस्या होनी चाहिए :)

+0

यह मदद नहीं करता है। – Pentium10

+0

हाय पेंटियम 10, क्या आपने इसे हल किया? मुझे लगता है कि आपके कोड में सब कुछ ठीक है: एस – Jorgesys

+1

मैंने हल नहीं किया। मुझे लगता है कि हम उस अतिरिक्त गतिविधि को पार करते हुए कस्टम एक्स्ट्रा बनाए रखा नहीं जाता है। – Pentium10

0

मैं इसके साथ कुछ समस्याओं में भी चल रहा था।

इस लाइन के बजाय

intent.putExtra(EXTRA_ONLINE_ID, (String) v.getTag()); 

प्रयास करें

intent.putExtra(EXTRA_ONLINE_ID, "" + v.getTag()); 
0

EXTRA_ONLINE_ID क्षेत्र गतिविधि है कि आप setResult का उपयोग कर का शुभारंभ में सेट किया जा करना होगा। यदि यह लौटाए गए इरादे में उस मान को सेट नहीं कर रहा है (जो आपने जो भेजा है उससे अलग है) तो आपको एक शून्य मान मिलेगा।

+0

जैसा कि आप देखते हैं कि यह contactContract.Contacts.CONTENT_URI का उपयोग करता है जो मेरे कोड बेस का हिस्सा नहीं है। – Pentium10

+0

मेरी मदद नहीं कर सकता तो मुझे लगता है। प्रश्न यह है कि आप पहले से मौजूद डेटा को वापस क्यों करना चाहते हैं। – Abhinav

+0

मैं इसे अन्य कोड खंड के साथ संगत बनाना चाहता हूं। – Pentium10

संबंधित मुद्दे