2011-02-08 7 views
10

मैंने अभी देखा है कि, जबकि Bundle से अधिकतर गेटर्स में डिफ़ॉल्ट मान शामिल करने की संभावना है, यदि कुंजी उस विशेष बंडल उदाहरण में मौजूद नहीं है, getString उस संभावना नहीं है, अगर उस मामले में शून्य वापस लौट रहा है।Bundle.getString (स्ट्रिंग कुंजी) पर डिफ़ॉल्ट मान

इस पर कोई विचार क्यों है और यदि उसके लिए आसान समाधान का कोई तरीका है (आसान से मेरा मतलब है कि प्रत्येक व्यक्तिगत मान की जांच न करें या Bundle कक्षा को विस्तारित न करें)।

उदाहरण के लिए, अभी आप केवल इस:

bundle.getString("ITEM_TITLE"); 

मैं करना चाहते हैं जबकि:

bundle.getString("ITEM_TITLE","Unknown Title"); 

धन्यवाद!

उत्तर

11

आप होगा यह अपने आप को रैप करने के लिए:

public String getBundleString(Bundle b, String key, String def) 
{ 
    String value = b.getString(key); 
    if (value == null) 
     value = def; 
    return value; 
} 
+0

यही था कि मैं क्या सोचा। लेकिन बंडल को विस्तारित करने का विचार अभी भी थोड़ा गन्दा लगता है। मुझे लगता है कि मैं इस पल के लिए हर बार जांच कर चिपकूँगा :) –

22

Trojanfoe सबसे अच्छा समाधान है, अगर है कि तुम क्या चाहते है, हालांकि एक बार आप अन्य डेटाटाइप्स के लिए चूक से निपटने में आप करना होगा उन सभी के लिए एक ही बात है।

एक अन्य समाधान को देखने के लिए बंडल कुंजी है, तो जाँच करने के लिए होगा:

String myString = bundle.containsKey("key") ? bundle.getString("key") : "default"; 

यह एक समारोह के रूप में के रूप में अच्छा नहीं है, लेकिन आप हमेशा लपेट यदि आप चाहते थे सकता है। ,

String s = bundle.getString("key"); 
if (s == null) s = "default"; 

क्योंकि Bundle संबंधित कुंजी शामिल कर सकते हैं, लेकिन यह (उदाहरण के एक int के लिए) एक अलग प्रकार का हो सकता है यह csaunders 'समाधान से बेहतर है में:

+0

यह काम नहीं करेगा अगर कुंजी मौजूद है लेकिन एक अलग प्रकार का है (वैकल्पिक के लिए मेरा जवाब देखें)। हालांकि, यह काम करेगा यदि आप सुनिश्चित हैं कि कुंजी में या तो 'स्ट्रिंग' हो या अस्तित्व में न हो, तो इस मामले में यह एक छोटा समाधान है (1 लाइन बनाम 2: पी)। – Felix

+0

यह सच है, लेकिन मैं बस सोच रहा था कि यह एक स्ट्रिंग माना जाता था। इसलिए, इस विधि का उपयोग न करें अगर आपको नहीं पता कि इस बंडल में कुंजी द्वारा संबोधित डेटा क्या होगा :) – csaunders

7

एक अन्य समाधान null के लिए जाँच करने के लिए है "default" के बजाय, null होने पर उसका समाधान myString परिणाम देगा।

6

नोट: http://developer.android.com/reference/android/os/Bundle.html

public String getString (String key, String defaultValue)

के बाद से: एपीआई स्तर 12

संपादित इस समारोह BaseBundle ले जाया गया है: here

+0

यह आदर्श दिखता है, हालांकि यह फ़ंक्शन मेरे लिए शून्य देता है। – toobsco42