2012-02-23 17 views
5

पर एक सरणीसूची भेजकर मैं अपनी मूल गतिविधिपैरेंट गतिविधि

पर एक सरणीसूची को पास करने का प्रयास कर रहा हूं, यह सरल कोड है।

private ArrayList<Receipt> receipts = new ArrayList<Receipt>(); 


Intent data = new Intent(); 
data. // what to do here? 
setResult(RESULT_OK, data); 

//************************************ 

यह बुनियादी रसीद क्लास है

public class Receipt { 


    public String referenceNo; 
    public byte[] image; 
    public String comments; 
    public Date createdOn; 
    public Date updatedOn; 

मुझे बताओ कि कैसे मैं अपने इरादे में जोड़ सकते हैं और मैं कैसे

onActivityResult(final int requestCode, int resultCode, final Intent data) 
+1

क्या आपने इस प्रश्न की जांच की है? -> http://stackoverflow.com/questions/5207510/android-passing-an-arraylist-back-to-parent-activity –

+0

http: // stackoverflow।com/प्रश्न/4626861/put-object-as-intent-for-next-activity ..... इस के समान ??? –

उत्तर

3

आप data.putExtra()/bundle.putSerializable() में कस्टम वस्तुओं डाल करने के लिए उपयोग कर सकते हैं एक बंडल/आशय, हालांकि, आप (सिर्फ वर्ग के नाम के बाद implements Serializable डाल अपनी कक्षा रसीद को लागू Serializable करना है, बस इतना ही वहाँ फिर इसे वापस पढ़ने के लिए getSerializable() का उपयोग इस तरह के एक सरल वर्ग के साथ यह करने के लिए है

नोट:।। मुझे नहीं लगता कि कि Date -clas एस serializable है, आप इसके बजाय मिलीसेकंड में लंबे समय से प्रतिनिधित्व समय के साथ प्रतिस्थापित करना चाहते हैं (आप इसके लिए Date.getTime() का उपयोग कर सकते हैं)।

उदाहरण:

public class Receipt implements Serializable{ 
    public String referenceNo; 
    public byte[] image; 
    public String comments; 
    public long createdOn; 
    public long updatedOn; 
    //... 
} 

//Put the list in the intent 
List<Receipt> list = ... 
Intent data = new Intent(); 
data.putExtra("tag", list); 

//Read the list from the intent: 
list = (List<Receipt>) data.getSerializableExtra("tag"); 
0

आपका समाधान है से माता-पिता गतिविधि में वापस इसे पुनः प्राप्त कर सकते हैं पार्सलबल का उपयोग करने के लिए। निम्न लिंक पर जाएं:

link1, link2, link3

0

आप बस अपनी ArrayList गुजरती हैं और वापस प्राप्त कर सकते हैं।

उदाहरण के लिए:

ArrayList<Receipt> list = new ArrayList<Receipt>(); 
intent intent = new Intent(); 
intent.putExtra("Hello", list); 

लेकिन सुनिश्चित करें कि आप अपने रसीद कक्षा में implements Serializable इंटरफ़ेस पड़ता है।

यानी

public class Receipt implements Serializable 
0

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

इसके बजाय, आप अपना स्वयं का एप्लिकेशन क्लास बना सकते हैं (आपको इसे अपने मैनिफेस्ट में भी पंजीकृत करना होगा)। तो फिर इस वर्ग में आप कर सकते हैं

class MyApplication extends Application { 
... 
public static Object mData; 
} 

और तुम तो MyApplication.mData = receipts और ArrayList<Receipt> receipts = (ArrayList<Receipt>)(MyApplication.mData) के रूप में उपयुक्त कर सकते हैं।

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

+1

इस विधि की सिफारिश नहीं की जाती है – Selvin

+0

यह प्रो एंड्रॉइड 3 पुस्तक और अन्य जगहों में डेटा एक्सचेंज के प्रस्तावित तरीकों में से एक है। वैसे भी, इस विधि के बारे में क्या बुरा है कि आप कह रहे हैं कि इसकी अनुशंसा नहीं की जाती है। इरादा डेटा के माध्यम से एक बहुत बड़ी सरणी पारित करने का प्रयास करें और आपको एएनआर त्रुटि दिखाई देगी। –

+0

पहले: मैंने इस पुस्तक पर एक नज़र डाली और अच्छी तरह से मैं इसके बारे में अच्छी बातें नहीं कह सकता। दूसरा: वैश्विक वस्तु को एप्लिकेशन के अंत तक मुक्त नहीं किया जाएगा। यही कारण है कि: यह समस्या अधिक जटिल है ... क्यों बड़े सरणी को पारित करने के इरादे से एफएसएम खातिर। अगर इसकी आवश्यकता है तो इसका मतलब है कि एप्लिकेशन खराब डिजाइन किया गया था। इस मामले में मेरी राय में हमें ContentProvider का उपयोग करना चाहिए और केवल Uri (Intent.getData()) को पास करना होगा, उसके बाद इस Uri के साथ सामग्री प्रदाता "पूछा" के बाद कर्सर को उन सभी डेटा के साथ वापस कर देना चाहिए जिन्हें हमें – Selvin