2012-07-09 8 views
20

Có cách nào để tôi có thể chuyển đổi giá trị int/short thành boolean không? Tôi nhận được JSON trông như thế này:Chuyển đổi int thành booleans

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

Tôi đang cố gắng để serialize nó thành một loại trông như thế này:

class UserInfo { 

    @SerializedName("is_user") 
    private boolean isUser; 

    @SerializedName("is_guest") 
    private boolean isGuest; 

    /* ... */ 
} 

Làm thế nào tôi có thể làm cho Gson dịch các int/lĩnh vực ngắn thành booleans?

Trả lời

44

Bắt đầu bằng cách nhận Gson 2.2.2 hoặc mới hơn. Các phiên bản trước (bao gồm 2.2) không hỗ trợ bộ điều hợp kiểu cho các kiểu nguyên thủy. Tiếp theo, hãy viết một bộ chuyển đổi loại hình có thể chuyển đổi số nguyên để boolean:

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); 
    } 
    } 
}; 

... và sau đó sử dụng mã này để tạo ra các ví dụ Gson:

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

Lưu ý rằng chuỗi "1" không được chuyển thành 'true':' Boolean.parseBoolean ("1") 'là' false'. –

+4

Thay thế 'Boolean.parseBoolean (in.nextString());' bằng 'in.nextString(). EqualsIgnoreCase (" 1 ");' để giải quyết vấn đề như đã đề cập bởi @LucaFagioli – NPE

0

Nếu bạn đang đọc chúng trong như ints hoặc quần short, sau đó bạn có thể chỉ

boolean b = (i != 0) 

đâu b là boolean bạn muốn nhận được và tôi là int hoặc giá trị ngắn.

Nếu bạn đang đọc chúng trong như Strings sau đó bạn muốn

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

hoặc

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

Làm thế nào để phù hợp với 'mới Gson() .fromJson (jsonString, UserInfo.class) '? –