2012-11-01 11 views
14

अब मैं अनुरोध कोड के लिए यादृच्छिक संख्या का उपयोग कर रहा हूं। इसलिए, हर बार जब मैं startActivityForResult के लिए नई गतिविधि जोड़ता हूं तो मुझे टकराव से बचने के लिए ऐसी सभी अन्य गतिविधियों की जांच करने की आवश्यकता होती है। मूल्यों को परिभाषित करने के लिए कोई प्रथाएं हो सकती हैं, डिज़ाइन द्वारा गैर-टिकाऊ? आपको क्या लगता है?एंड्रॉइड में अनुरोध कोड मानों के लिए कोई सिफारिशें हैं?

+3

मैं सिर्फ यादृच्छिक संख्या का उपयोग करें (संकलन समय पर उत्पन्न), और कभी भी कोई समस्या नहीं थी - लेकिन यह एक अच्छा सवाल है। – Booger

उत्तर

3

यदि आपको अभी भी किसी गतिविधि के परिणाम की जांच करने की आवश्यकता है और दृष्टि से पॉलिश संरचनाओं कृपया इस विधि की जांच करें। जब गतिविधि शुरू करने

class RequestCode { 
    static final int IMPORT = 100; 
    static final int WRITE_PERMISSION = 101; 
} 

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

अपनी गतिविधि वर्ग के भीतर आंतरिक वर्ग घोषित

startActivityForResult(intent, RequestCode.IMPORT); 

परिणाम की जाँच करें:

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == RequestCode.IMPORT && resultCode == RESULT_OK) { 
     //... 
    } 
} 
9

एक संख्या में वृद्धि करने के लिए टकराव मुक्त होने की गारंटी है (जब तक यह लपेटता है)। वास्तव में तब तक नहीं होना चाहिए जब तक कि आप उनमें से बहुत से उपयोग न करें।

आप अपनी परियोजना में एक कक्षा जोड़ सकते हैं जो आपको नंबर देता है। उदाहरण

public class GlobalStuff { 
    private static final AtomicInteger seed = new AtomicInteger(); 
    public static int getFreshInt() { 
     return seed.incrementAndGet(); 
    } 
} 
अब

अपने कोड में, के लिए जब भी आप

public void doSomething() { 
    startActivityForResult(intentA, 342); 
} 

के बजाय एक नंबर का उपयोग करना जैसे

private static final int REQUEST_CODE = GlobalStuff.getFreshInt(); 
public void doSomething() { 
    startActivityForResult(intentA, REQUEST_CODE); 
} 

यह करना है और आप सुरक्षित है कि आप का उपयोग नहीं करते हैं दो बार एक ही संख्या। कम से कम कोड एक ही प्रक्रिया में चलाता है।

केवल समस्या यह है कि आप एक switch बयान में उन नंबरों का उपयोग नहीं कर सकते हैं (case REQUEST_CODE: के रूप में) क्योंकि स्विच संख्या कि संकलन समय पर जाना जाता है की जरूरत है

+0

क्या आप इसे वैश्विक हैशप की सहायता से स्विच स्टेटमेंट में उपयोग कर सकते हैं, शायद? – creitve

+0

यह दृष्टिकोण बहुत अच्छा काम करता है .. जब तक कोई तृतीय पक्ष लाइब्रेरी कुछ ऐसा करने का निर्णय नहीं लेती। –

10

वास्तव में आप की जाँच करने की जरूरत नहीं है सब अपने गतिविधियां और इससे कोई फर्क नहीं पड़ता कि आपके पास अलग-अलग गतिविधियों में समान मूल्य हैं।

अनुरोध कोड के लिए विचार यह है कि आप onActivityResult() में अपने गतिविधि एक्स में startActivityForResult() के साथ शुरू किए गए विभिन्न अनुरोधों के परिणामों के बीच अंतर कर सकते हैं।

तो अगर आप अपनी गतिविधि में 3 अलग startActivityForResult() कॉल है, तो आप क्रम में 3 अलग अनुरोध कोड की आवश्यकता onActivityResult() में उन दोनों के बीच भेद करने के लिए सक्षम होने के लिए की जाती है - तो आप बता सकते हैं जो परिणाम अंतर्गत आता है जो करने के लिए शुरू । लेकिन अगर आपके पास एक और गतिविधि वाई है जहां आप कुछ ऐसा कर रहे हैं, तो इससे कोई फर्क नहीं पड़ता कि अनुरोध कोड वहां गतिविधि एक्स जैसे हैं।

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