应为BEGIN_数组,但为字符串改型Android
Json数据应为BEGIN_数组,但为字符串改型Android,android,retrofit,Android,Retrofit,Json数据 [ { "date": "25-09-2016", "_id": { "$oid": "57e601bbf2a9d92a445ef8a3" }, "createdAt": "2016-09-24 10:01:55 +0530", "horoscope": [ { "date": "25-09-2016", "sunsign": "aries", "horoscope"
[
{
"date": "25-09-2016",
"_id": {
"$oid": "57e601bbf2a9d92a445ef8a3"
},
"createdAt": "2016-09-24 10:01:55 +0530",
"horoscope": [
{
"date": "25-09-2016",
"sunsign": "aries",
"horoscope": "Testing.."
},
{
"date": "25-09-2016",
"sunsign": "taurus",
"horoscope": "Testing.."
},
{
"date": "25-09-2016",
"sunsign": "pisces",
"horoscope": "Testing.."
}
]
}
]
HoroscopeModel.java:
public class HoroscopeModel {
private Date date;
private Date createdAt;
private List<HoroscopeModel> horoscope;
public List<HoroscopeModel> getHoroscope() {
return horoscope;
}
public void setHoroscope(List<HoroscopeModel> horoscope) {
this.horoscope = horoscope;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public Date getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
public List<HoroscopeModel> getHoroscopeList() {
return horoscope;
}
public void setHoroscopeList(List<HoroscopeModel> horoscopeList) {
this.horoscope = horoscopeList;
}
}
ApiInterface.java
public interface ApiInterface {
@GET("/get_horoscope")
Call<List<HoroscopeModel>> getHoroscope();
}
DateDeserializer.java
public class DateDeserializer implements JsonDeserializer<Date> {
private static final String TAG = "DateDeserializer";
private static final String[] DATE_FORMATS = new String[]{
"yyy-MM-dd hh:mm:ss Z",//2016-09-24 08:18:56 +0530
"dd-MM-yyyy"
};
@Override
public Date deserialize(JsonElement jsonElement, Type typeOF,
JsonDeserializationContext context) throws JsonParseException {
for (String format : DATE_FORMATS) {
try {
return new SimpleDateFormat(format, Locale.US).parse(jsonElement.getAsString());
} catch (ParseException e) {
}
}
throw new JsonParseException("Unparseable date: \"" + jsonElement.getAsString()
+ "\". Supported formats: " + Arrays.toString(DATE_FORMATS));
}
}
公共类DateDeserializer实现JsonDeserializer{
私有静态最终字符串标记=“DateDeserializer”;
私有静态最终字符串[]日期\格式=新字符串[]{
“yyy-MM-dd hh:MM:ss Z”//2016-09-24 08:18:56+0530
“dd-MM-yyyy”
};
@凌驾
公共日期反序列化(JsonElement JsonElement,类型为,
JsonDeserializationContext)抛出JsonParseException{
for(字符串格式:日期格式){
试一试{
返回新的SimpleDataFormat(格式,Locale.US).parse(jsoneElement.getAsString());
}捕获(解析异常){
}
}
抛出新的JsonParseException(“不可解析的日期:\”+jsonElement.getAsString()
+“\”。支持的格式:“+Arrays.toString(日期\格式));
}
}
一切都已完美设置,它会抛出一个错误,显示
java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第183列路径$[0]处为字符串。占星术[0]。占星术
,请告知我的代码中是否有错误。提前感谢。Gosn不会直接将字符串转换为日期,它需要定义以下特定格式
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss")
.create();
因此,您应该使用字符串来代替日期,如下所示
public class Horoscope {
String date
及
错误消息是不言自明的
$[0]。占星术[0]。占星术
是一个字符串
,但您正在尝试将其反序列化到一个列表
这是因为在HoroscopeModel
中,您将horoscope
定义为List
的类型,而不是List
Gson正试图将占星术
(a字符串
)的值反序列化到占星术模型
(a列表
)的占星术
字段中,而不是占星术
(a字符串
)的占星术
字段中
在星座模型中,更改为以下字段:
private List<HoroscopeModel> horoscope;
私人列表占星术;
为此:
private List<Horoscope> horoscope;
私人列表占星术;
(别忘了修改相应的方法)我希望这不是问题所在,我已经在Gson上安装了日期反序列化程序,请查看我更新的问题。
public class HoroscopeModel {
private String date;
private String createdAt;
private List<HoroscopeModel> horoscope;
private List<Horoscope> horoscope;