【发布时间】:2018-07-17 21:23:54
【问题描述】:
我的 Retrofit2 调用出现以下异常:
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在第 1 行第 22311 列路径 $[1].programme[3].credits.presenter
我可能知道它为什么会被抛出。一些“信用”对象有多个“演示者”,它们以 JSON 数组({"presenter":["Barbara Schledduytkew","Hubert Muckhutgoldwes"]})的形式给出,但是,有些其他人只有一个“presenter”,它以 JSON 对象的形式给出 ({"presenter":"Rosalynda Demstogtrojkt"})
我需要找到一种方法来解析两种情况下的演示者项目。我想我必须编写自己的自定义 TypeAdapter,但我不确定并且需要帮助。提前致谢。
改造实例:
retrofit = new Retrofit.Builder()
.baseUrl(Constants.URL_HOST)
.client(okHttpClient.build())
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
学分类:
public class Credits {
@SerializedName("director")
@Expose
private List<String> director;
@SerializedName("actor")
@Expose
private List<String> actor = null;
@SerializedName("presenter")
@Expose
private List<String> presenter;
@SerializedName("commentator")
@Expose
private String commentator;
public List<String> getDirector() {
return director;
}
public void setDirector(List<String> director) {
this.director = director;
}
public List<String> getActor() {
return actor;
}
public void setActor(List<String> actor) {
this.actor = actor;
}
public List<String> getPresenter() {
return presenter;
}
public void setPresenter(List<String> presenter) {
this.presenter = presenter;
}
public String getCommentator() {
return commentator;
}
public void setCommentator(String commentator) {
this.commentator = commentator;
}
}
【问题讨论】:
-
使用反序列化器,看这个例子stackoverflow.com/a/46320656/8009433
标签: android json gson retrofit2