2012-07-09 19 views
20

int/short値をブール値に変換する方法はありますか?私はこのようになりますタイプにそれをシリアル化しようとしているintをブール値に変換する

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

class UserInfo { 

    @SerializedName("is_user") 
    private boolean isUser; 

    @SerializedName("is_guest") 
    private boolean isGuest; 

    /* ... */ 
} 

はどうすればGsonは、これらのint型/ショートフィールドを翻訳することができます私はこのようになりますJSONを受けていますブーリアンに?

答えて

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"は "true"に変換されないことに注意してください: 'Boolean.parseBoolean(" 1 ")'は 'false'です。 –

+4

@LucaFagioliで述べたように、 'Boolean.parseBoolean(in.nextString());'を 'in.nextString()。equalsIgnoreCase(" 1 ");'に置き換えてください – NPE

0

あなたはint型やショートパンツとしてそれらを読んでいる場合は、あなたができるだけで

boolean b = (i != 0) 

bはあなたが取得したいブール値であると私はintまたはshort値です。

あなたは文字列としてそれらを読んでいるなら、あなたは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) '? –

関連する問題