2012-07-09 15 views
20

क्या कोई तरीका है कि मैं int/short मानों को बूलियन में परिवर्तित कर सकता हूं?इनट्स को बूलियन में कनवर्ट करें

{ is_user: "0", is_guest: "0" } 

मैं एक प्रकार है कि इस तरह दिखता है में क्रमानुसार करने कोशिश कर रहा हूँ: मैं JSON कि इस तरह दिखता है प्राप्त कर रहा हूँ

class UserInfo { 

    @SerializedName("is_user") 
    private boolean isUser; 

    @SerializedName("is_guest") 
    private boolean isGuest; 

    /* ... */ 
} 

मैं कैसे Gson इन पूर्णांक/कम क्षेत्रों का अनुवाद कर सकते हैं बुलियन में?

उत्तर

44

प्रारंभ करना चाहते हैं। पहले के संस्करण (2.2 सहित) आदिम प्रकारों के लिए प्रकार एडाप्टर का समर्थन नहीं करते हैं। इसके बाद, एक प्रकार एडाप्टर बूलियन्स को पूर्णांकों धर्मान्तरित लिखें:

private static final TypeAdapter<Boolean> booleanAsIntAdapter = new TypeAdapter<Boolean>() { 
    @Override public void write(JsonWriter out, Boolean value) throws IOException { 
    if (value == null) { 
     out.nullValue(); 
    } else { 
     out.value(value); 
    } 
    } 
    @Override public Boolean read(JsonReader in) throws IOException { 
    JsonToken peek = in.peek(); 
    switch (peek) { 
    case BOOLEAN: 
     return in.nextBoolean(); 
    case NULL: 
     in.nextNull(); 
     return null; 
    case NUMBER: 
     return in.nextInt() != 0; 
    case STRING: 
     return Boolean.parseBoolean(in.nextString()); 
    default: 
     throw new IllegalStateException("Expected BOOLEAN or NUMBER but was " + peek); 
    } 
    } 
}; 

... और फिर Gson उदाहरण बनाने के लिए इस कोड का उपयोग करें:

Gson gson = new GsonBuilder() 
     .registerTypeAdapter(Boolean.class, booleanAsIntAdapter) 
     .registerTypeAdapter(boolean.class, booleanAsIntAdapter) 
     .create(); 
+0

ध्यान रखें कि स्ट्रिंग "1" को 'सत्य' में परिवर्तित नहीं किया गया है: 'Boolean.parseBoolean ("1") '' false' है। –

+4

'Boolean.parseBoolean (in.nextString()) को बदलें;' in.nextString() के साथ। बराबर अनदेखा करें ("1"); 'LucaFagioli द्वारा उल्लिखित समस्या हल करने के लिए – NPE

0

आप, ints या शॉर्ट्स के रूप में उन्हें पढ़ रहे हैं, तो आप कर सकते हैं बस

boolean b = (i != 0) 

कहाँ ख बूलियन आप प्राप्त करना चाहते है और मैं पूर्णांक या कम मूल्य है।

आप उन्हें तार के रूप में में पढ़ रहे हैं तो आप Gson 2.2.2 या बाद में हो रही द्वारा

boolean b = !s.equals("0"); // use this if you WANT null pointer exception 
          // if the string is null, useful for catching 
          // bugs 

या

boolean b = !"0".equals(s); // avoids null pointer exception, but may silently 
          // let a bug through 
+2

कैसे है कि साथ में फिट 'नई Gson() .fromJson (jsonString, UserInfo.class) '? –

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