Android 使用GSON和改型将JSON转换为java对象是不可能的
我在我的项目中使用翻新。我有个问题。我的JSON无法转换为对象 这是我的JSON:Android 使用GSON和改型将JSON转换为java对象是不可能的,android,gson,retrofit,Android,Gson,Retrofit,我在我的项目中使用翻新。我有个问题。我的JSON无法转换为对象 这是我的JSON: {"id":1,"facebookId":"123","uuid":"xU71niPhrqzFqmBFhk5fl4LlvWg6zk42ENG4iMjgl3eJEb9LAcqVcc9NmLHzFIgg","userInfo":{"id":1,"user":null,"email":"IP696@mail.ru","firstName":"Pavel","lastName":"Petrashov","name":nu
{"id":1,"facebookId":"123","uuid":"xU71niPhrqzFqmBFhk5fl4LlvWg6zk42ENG4iMjgl3eJEb9LAcqVcc9NmLHzFIgg","userInfo":{"id":1,"user":null,"email":"IP696@mail.ru","firstName":"Pavel","lastName":"Petrashov","name":null,"dob":null,"gender":null,"facebookLink":"link","locale":null,"location":null,"timezone":null,"verified":null,"updatedTime":null},"balancedCustomer":null,"session":{"id":1,"session":"FTKuyeb1BXBzXRZzsAuwPYs4eRIpdi2Z","expirationDate":1424839445000,"ip":null,"user":null}}
以下是我的改装方法:
public ApiUser getApiUser(){
if (null == apiUser) {
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
RestAdapter.Builder builder = new RestAdapter.Builder()
.setEndpoint(BuildConfig.ROOT_URL_SKIP)
.setClient(new OkClient(new OkHttpClient()))
.setConverter(new GsonConverter(gson));
builder.setLogLevel(RestAdapter.LogLevel.FULL);
RestAdapter restAdapter = builder.build();
apiUser = restAdapter.create(ApiUser.class);
}
return apiUser;
}
我得到了这个错误:
Error: com.google.gson.JsonSyntaxException: 1424839445000
我的课程是这样的:
@Table(name = "Users")
public class User extends Model {
@Expose
@Column(name = "facebookId")
@SerializedName("facebookId")
private String facebookId;
@Expose
@Column(name = "uuid")
@SerializedName("uuid")
private String uuid;
@Expose
@Column(name = "userInfo")
@SerializedName("userInfo")
private UserInfo userInfo;
@Expose
@Column(name = "balancedCustomer")
@SerializedName("balancedCustomer")
private BalancedCustomer balancedCustomer;
@Expose
@Column(name = "session")
@SerializedName("session")
private Session session;
public User() {
super();
}
public UserInfo getUserInfo() {
return userInfo;
}
public Session getSession() {
return session;
}
public void setSession(Session session) {
this.session = session;
}
public String getFacebookId() {
return facebookId;
}
public void setFacebookId(String facebookId) {
this.facebookId = facebookId;
}
public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getUuid() {
return uuid;
}
public BalancedCustomer getBalancedCustomer() {
return balancedCustomer;
}
public void setBalancedCustomer(BalancedCustomer balancedCustomer) {
this.balancedCustomer = balancedCustomer;
}
}
编辑,整个班级
@Table(name = "Sessions")
public class Session extends Model {
@Expose
@Column(name = "session")
@SerializedName("session")
private String session;
@Expose
@Column(name = "expirationDate")
@SerializedName("expirationDate")
private Date expirationDate;
…不要尝试使用Date对象获取
expirationDate
,因为在json
中,它就像是未格式化的。您应该做的是,在model
类中接收like string或double,然后在应用程序内部更改或解析为日期格式
@Expose
@Column(name = "expirationDate")
@SerializedName("expirationDate")
private String expirationDate;
获取
expirationDate
作为long
而不是Date
:
@Expose
@Column(name = "expirationDate")
@SerializedName("expirationDate")
private long expirationDate;
这将解决您的问题: 如果您遇到任何问题,请告诉我。
Gson Gson=new GsonBuilder().excludeFieldsWithoutExposeAnnotation().registerTypeAdapter(Date.class,new JsonDeserializer()){
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return new Date(json.getAsJsonPrimitive().getAsLong());
}
}).create();
公共日期反序列化(JsonElement json,类型typeOfT,JsonDeserializationContext)引发JsonParseException{
返回新日期(json.getAsJsonPrimitive().getAsLong());
}
}).create();
感谢链接@Deepak Bala
将
会话->过期日期的数据类型更改为Long或String,然后当您要将其转换为日期对象时,只需使用此选项
Date date=new Date(expirationDate);
在User
classother类中显示具有相同注释的所有变量声明。所有类型的名称相同。其中添加了expirationDate
字段。课堂上看一下这个-