2012-10-29 11 views
15

मैं एक प्रतिक्रिया एक सर्वर से वापस आ रहा है और मैं एक स्ट्रिंग मान की उम्मीद कर रहा हूँ, इसलिए मैं यहJSON.getString वापस नहीं करता है अशक्त

public String getMessageFromServer(JSONObject response) { 
    String msg = response.getString("message"); 
    return msg; 
} 

तो पार्स करने के लिए यह लिखा है, जब मैं में इस का उपयोग किया है मेरी कोड और सर्वर से null मान प्राप्त करें, फ़ंक्शन null वापस नहीं करता है, यह इसके बजाय "null" देता है।

मैंने this bug report देखा है, लेकिन मुझे कोई समाधान नहीं दिख रहा है।

संपादित करें:

मैं इस को हल करने के लिए एक छोटा सा हैक है, लेकिन यह बदसूरत है और मैं एक बेहतर समाधान के लिए देख रहा हूँ:

public String getMessageFromServer(JSONObject response) { 
    Object msg = response.get("message"); 
    if(msg == null) { 
     return null; 
    } 
    return (String) msg; 
}  
+1

जो मुझे करने के लिए ठीक लग रहा है। –

+1

यह ठीक है, लेकिन यह एक बदसूरत हैक है और मैं इसे नापसंद करता हूं – thepoosh

+1

वह बदसूरत या हैक क्यों है? आप बस इसे अच्छी तरह से कर रहे हैं –

उत्तर

16

हैक अपनी स्थिति के लिए ठीक लग रहा है।

दूसरा विकल्प विधि boolean isNull(String key) विधि का उपयोग करना होगा और फिर आपके विकल्प के साथ लौटा हुआ बूलियन मान आगे बढ़ना होगा। कुछ ऐसा:

public String getMessageFromServer(JSONObject response) { 
    return ((response.has("message") && !response.isNull("message"))) ? response.getString("message") : null; 
} 

लेकिन फिर, मुझे नहीं लगता कि आपके वर्तमान कार्यान्वयन और इसके बीच बहुत अंतर है।

+2

+1। लेकिन जब आप कहते हैं कि इसमें कोई फर्क नहीं पड़ता है तो मैं सहमत नहीं हूं। IsNUll-call क्लीनर है और ऑब्जेक्ट और कास्टिंग पर भरोसा करने के लिए प्राथमिकता दी जानी चाहिए। – EinLama

+0

क्या आप 'response.has (" message) "' चेक को हटा नहीं सकते? जब भी वह कुंजी मौजूद नहीं होती है, 'isNull' सच हो जाएगी, इसलिए' getString' नहीं कहा जाएगा और कोई अपवाद नहीं फेंक दिया जाएगा। –

0

भी एक संभावना,

public String getMessageFromServer(JSONObject response) { 
    String msg = response.getString("message", null); 
    if(msg == null) { 
     return null; 
    } 

    return msg; 
}  
+0

लॉल, क्या आपका आईडीई या कंपाइलर आपको इस तथ्य के बारे में चेतावनी नहीं देता है कि अगर पूरा बयान बेकार है? यदि 'msg' शून्य है तो' getMessageFromServer' विधि के अंदर ही 'msg' वापस लौटें। –

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