我正在使用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类。列出像&#34;性别&#34;和&#34;年龄&#34;工作得很好。但是,布尔人仍然无法设定。 (这个特别奇怪,因为通过Retrofit发送这个对象正好发送了这个文件,所以GSON肯定知道布尔值。)
如剪辑所示,我还尝试了其他方法,例如将布尔包装类作为类型而不是布尔值。 我还使用了 @SerializeName 注释或getter和setts方法等。 仍然所有的布尔都是假的。即使我声明它们默认为true(因此GSON似乎总是用false覆盖此值)。
希望有人有个好主意!
答案 0 :(得分:0)
示例中要解析的JSON的所有值均为false
。解析时,GSON将使用反射来覆盖类的字段值,这意味着从JSON解析的任何值都将是该字段的值,而不管它如何在类中初始化。
这是一个示例响应,它将导致将字段设置为true。同样,这取决于您要解析的JSON。
{
"gender":[0,1],
"age":[20,30],
"likesLeaveHome":true,
"likesSport":true,
"likesCulture":true,
"likesTraveling":true
...
}