2012-11-16 17 views
39

मैं इस कोड है कि एक गतिविधि पर एक आशय में एक अतिरिक्त के एक मूल्य है कि मेरे ऐप में कई स्थानों से कहा जाता है के लिए जाँच करता है:मैं कैसे बता सकता हूं कि एंड्रॉइड में इरादा अतिरिक्त मौजूद है या नहीं?

getIntent().getExtras().getBoolean("isNewItem") 

isNewItem सेट नहीं है, मेरे कोड दुर्घटना होगी? क्या यह कहने का कोई तरीका है कि इसे कॉल करने से पहले सेट किया गया है या नहीं?

इसे संभालने का उचित तरीका क्या है?

if(getIntent() != null && getIntent().getExtras() != null) 
    myBoolean = getIntent().getExtras().getBoolean("isNewItem"); 

वैसे, अगर isNewItem मौजूद नहीं है, यह डे डिफ़ॉल्ट vaule false रिटर्न:

उत्तर

92

जैसा कि अन्य ने कहा है, getIntent() और getExtras() दोनों शून्य हो सकते हैं। इस वजह से, आप कॉल को एकसाथ श्रृंखला नहीं करना चाहते हैं, अन्यथा आप null.getBoolean("isNewItem"); पर कॉल करना बंद कर सकते हैं जो NullPointerException फेंक देगा और आपके एप्लिकेशन को क्रैश कर देगा।

यहां बताया गया है कि मैं इसे कैसे पूरा करूंगा। मुझे लगता है कि यह सबसे अच्छे तरीके से स्वरूपित है और किसी अन्य व्यक्ति द्वारा बहुत आसानी से समझा जाता है जो आपका कोड पढ़ सकता है।

// You can be pretty confident that the intent will not be null here. 
Intent intent = getIntent(); 

// Get the extras (if there are any) 
Bundle extras = intent.getExtras(); 
if (extras != null) { 
    if (extras.containsKey("isNewItem")) { 
     boolean isNew = extras.getBoolean("isNewItem", false); 

     // TODO: Do something with the value of isNew. 
    } 
} 

आप करना वास्तव में containsKey("isNewItem")getBoolean("isNewItem", false) के रूप में करने के लिए कॉल की जरूरत नहीं अवास्तविक लौटाते हैं, तो अतिरिक्त मौजूद नहीं है। आप कुछ इस तरह के ऊपर गाढ़ा सकता है:

Bundle extras = getIntent().getExtras(); 
if (extras != null) { 
    boolean isNew = extras.getBoolean("isNewItem", false); 
    if (isNew) { 
     // Do something 
    } else { 
     // Do something else 
    } 
} 

आप सीधे अपने एक्स्ट्रा कलाकार का उपयोग करने की Intent तरीकों का उपयोग कर सकते हैं। यह संभवतः ऐसा करने का सबसे साफ तरीका है:

boolean isNew = getIntent().getBooleanExtra("isNewItem", false); 

वास्तव में यहां पर कोई भी विधि स्वीकार्य है। वह व्यक्ति चुनें जो आपको समझ में आता है और इसे इस तरह से करता है।

+2

मैं समझ एक समस्या है कि लोगों को '() का उपयोग getExtras' पहली जगह में। क्यो ऐसा करें? 'इराद' वर्ग में किसी भी प्रकार का 'अतिरिक्त' प्राप्त करने के लिए आवश्यक सभी विधियां हैं - 'बंडल' प्राप्त करने की कोई आवश्यकता नहीं है। – Squonk

+3

धन्यवाद @Squonk, यह एक अच्छा मुद्दा है। कभी-कभी 'इंटेंट' से पूरे 'बंडल' को लाने के लिए यह थोड़ा क्लीनर होता है जब आपके पास गणना करने के लिए बहुत सारे एक्स्ट्रा होते हैं। – twaddington

+0

इसके बारे में सोचते हुए, मेरी टिप्पणी ज्यादातर इस तथ्य पर आधारित थी कि मैं आमतौर पर 'इरादा' का विश्लेषण करना चाहता हूं। उदाहरण के लिए, मैं 'एक्शन', 'श्रेणी' और इसी तरह से जानना चाहता हूं। ऐसा करने के लिए मुझे पहले 'इरादा' मिल जाएगा, फिर बाद में अतिरिक्त पर ध्यान केंद्रित करें। ओपी के सवाल के मामले में आपका जवाब पूरी तरह मान्य है। – Squonk

7

समस्या नहीं getBoolean() लेकिन getIntent().getExtras()

टेस्ट इस तरह से है।

सम्मान।

1

getIntent()null वापस आ जाएगी अगर वहाँ कोई Intent इसलिए का उपयोग करें ...

boolean isNewItem = false; 
Intent i = getIntent(); 
if (i != null) 
    isNewItem = i.getBooleanExtra("isNewItem", false); 
0

जब तक जब तक आप इसका इस्तेमाल यह दुर्घटना नहीं होगा! यदि यह अस्तित्व में है तो आपको इसे प्राप्त करने की आवश्यकता नहीं है, लेकिन यदि आप किसी कारण से "अतिरिक्त" का उपयोग करने की कोशिश करते हैं, जो 'मौजूद नहीं है' आपका सिस्टम क्रैश हो जाएगा।

final Bundle bundle = getIntent().getExtras(); 

boolean myBool=false; 

if(bundle != null) { 
    myBool = bundle.getBoolean("isNewItem"); 
} 

इस तरह आप सुनिश्चित करें कि आपके एप्लिकेशन क्रैश नहीं करेंगे बनाने:

तो, ओ की तरह कुछ करने का प्रयास करें। (और सुनिश्चित करें कि आपके पास वैध Intent है :))

3

आप ऐसा कर सकते हैं:

Intent intent = getIntent(); 
if(intent.hasExtra("isNewItem")) { 
    intent.getExtras().getBoolean("isNewItem"); 
} 
संबंधित मुद्दे

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