应为BEGIN_数组,但为字符串改型Android

应为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"

Json数据

[
  {
    "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;