GSON 不解析布尔值(始终为假)
Posted
技术标签:
【中文标题】GSON 不解析布尔值(始终为假)【英文标题】:GSON not parsing booleans (always false) 【发布时间】:2016-10-09 16:24:38 【问题描述】:我正在使用 Retrofit 来获取 JSON 文档。问题是,所有布尔值总是错误的。
响应如下所示:
"gender":[0,1],
"age":[20,30],
"likesLeaveHome":false,
"likesSport":false,
"likesCulture":false,
"likesTraveling":false
...
我用
调用改造方法onResponse(Call<SearchProfile> call, Response<SearchProfile> response)
并且应该将响应解析为的 SearchProfile 类如下所示:
public class SearchProfile
public ArrayList<Integer> gender = new ArrayList<>(); // works fine
public ArrayList<Integer> age = new ArrayList<>(); // works fine
...
public Boolean likesLeaveHome = true; // always false
@SerializedName("likesSport")
public boolean likesSport = true; // always false
@SerializedName("likesCulture")
public Boolean likesCulture; // always false
@SerializedName("likesTraveling")
public Boolean mLikesTraveling; // always false
public boolean isLikesTraveling()
return mLikesTraveling;
public void setLikesTraveling(boolean likesTraveling)
mLikesTraveling = likesTraveling;
如您所见,它是一个简单的 pojo 类。像“性别”和“年龄”这样的列表工作得很好。尽管如此,布尔值仍无法设置。 (这特别奇怪,因为通过 Retrofit 发送这个对象发送的正是这个文档,所以 GSON 肯定知道布尔值)。
如截图所示,我还尝试了其他方法,例如将 Boolean 包装类作为类型而不是布尔值。 我还使用了 @SerializeName 注释或 getter 和 setts 方法等。 仍然所有布尔值总是错误的。即使我将它们默认为 true(所以 GSON 似乎总是用 false 覆盖这个值)。
希望有人有一个好主意!
【问题讨论】:
你用的是什么版本?我试过“2.6.2”,效果很好。 "您在示例中解析的 JSON 的所有值都为 false
。解析时,GSON 将使用反射覆盖类的字段值,这意味着从 JSON 解析的任何值都将是该字段的值,无论它在类中如何初始化。
这是一个示例响应,它将导致字段设置为 true。同样,这取决于您要解析的任何 JSON。
"gender":[0,1],
"age":[20,30],
"likesLeaveHome":true,
"likesSport":true,
"likesCulture":true,
"likesTraveling":true
...
【讨论】:
以上是关于GSON 不解析布尔值(始终为假)的主要内容,如果未能解决你的问题,请参考以下文章
如果数组中的所有值都为真(字符串)并且其中一个值为假(字符串),则如何返回布尔值 true 停止使用 Javascript 进行检查