java - Retrofit2 java.lang.IllegalStateException:预期 BEGIN_ARRAY 但在第 1 行第 2 列路径 $ 处是 BEGIN_OBJECT
问题描述
我知道这不是第一次有人问这个问题,但是使用 Retrofit2 我找不到解决问题的正确方法。我正在尝试通过我的 API 获取电影列表,但应用程序抛出此错误:
预期为 BEGIN_ARRAY,但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT
方法:
private void getPopularData() {
Retrofit retrofit = RetrofitClient.getRetrofitInstance();
MovieApi api = retrofit.create(MovieApi.class);
Call<List<Video>> call = api.getPopularMovies(Config.API_KEY);
call.enqueue(new Callback<List<Video>>() {
@Override
public void onResponse(Call<List<Video>> call, retrofit2.Response<List<Video>> response) {
if (response.code() == 200){
for (int i = 0; i < response.body().size(); i++){
Video video = response.body().get(i);
CommonModels models =new CommonModels();
models.setImageUrl(video.getThumbnailUrl());
models.setTitle(video.getTitle());
models.setQuality(video.getVideoQuality());
models.setReleaseDate(video.getRelease());
models.setImdb_rating(video.getImdb_rating());
models.setId(video.getVideosId());
list.add(models);
}
mAdapter.notifyDataSetChanged();
}
}
@Override
public void onFailure(Call<List<Video>> call, Throwable t) {
Log.e("ERROR", " "+t);
}
});
}
界面:
public interface MovieApi {
@GET("mostpopularmovies")
Call<List<Video>> getPopularMovies(@Query("API-KEY") String apiKey);
}
这是我在网络浏览器上尝试时加载的响应正文:
{"mostpopularmovies":[{"title":"Cyborgs Amongst Us","release":"2017-06-27","total_view":"103"},{"title":"Bad Nun: Deadly Vows","release":"2020-08-18","total_view":"81"},{"title":"Greyhound","release":"2020-07-10","total_view":"58"},{"title":"The Boys","release":"2019-07-25","total_view":"56"},{"title":"Emily in Paris","release":"2020-10-02","total_view":"25"},{"title":"Enola Holmes","release":"2020-09-23","total_view":"15"},{"title":"The Owners","release":"2020-08-27","total_view":"5"}]}
任何帮助表示赞赏
编辑:
我的视频课:
public class Video {
@SerializedName("videos_id")
@Expose
private String videosId;
@SerializedName("title")
@Expose
private String title;
@SerializedName("description")
@Expose
private String description;
@SerializedName("slug")
@Expose
private String slug;
@SerializedName("release")
@Expose
private String release;
@SerializedName("is_tvseries")
@Expose
private String isTvseries;
@SerializedName("is_paid")
@Expose
private String isPaid;
@SerializedName("runtime")
@Expose
private String runtime;
@SerializedName("video_quality")
@Expose
private String videoQuality;
@SerializedName("thumbnail_url")
@Expose
private String thumbnailUrl;
@SerializedName("poster_url")
@Expose
private String posterUrl;
@SerializedName("imdb_rating")
@Expose
private String imdb_rating;
public String getVideosId() {
return videosId;
}
public void setVideosId(String videosId) {
this.videosId = videosId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getSlug() {
return slug;
}
public void setSlug(String slug) {
this.slug = slug;
}
public String getRelease() {
return release;
}
public void setRelease(String release) {
this.release = release;
}
public String getIsTvseries() {
return isTvseries;
}
public void setIsTvseries(String isTvseries) {
this.isTvseries = isTvseries;
}
public String getIsPaid() {
return isPaid;
}
public void setIsPaid(String isPaid) {
this.isPaid = isPaid;
}
public String getRuntime() {
return runtime;
}
public void setRuntime(String runtime) {
this.runtime = runtime;
}
public String getVideoQuality() {
return videoQuality;
}
public void setVideoQuality(String videoQuality) {
this.videoQuality = videoQuality;
}
public String getThumbnailUrl() {
return thumbnailUrl;
}
public void setThumbnailUrl(String thumbnailUrl) {
this.thumbnailUrl = thumbnailUrl;
}
public String getPosterUrl() {
return posterUrl;
}
public void setPosterUrl(String posterUrl) {
this.posterUrl = posterUrl;
}
public String getImdb_rating() {
return imdb_rating;
}
public void setImdb_rating(String imdb_rating) {
this.imdb_rating = imdb_rating;
}
}
解决方案
您可以制作另一个模型类,例如,
class MovieListResponse {
public List<Movie> mostpopularmovies;
}
public interface MovieApi {
@GET("mostpopularmovies")
Call<MovieListResponse> getPopularMovies(@Query("API-KEY") String apiKey);
}
推荐阅读
- python-3.x - 在不下载 chromedriver 的情况下运行脚本
- bluetooth-lowenergy - 一个 Gatt 中的单独与组合特征
- python - 创建新日期时如何解决“类型对象'datetime.datetime'没有属性'timedelta'”?
- spring - 我应该如何使用 Spring WebClient 代表另一个用户以非交互方式访问受 OAuth 保护的资源?
- algorithm - 带有 Elo 的评分系统,更好的选择?
- java - 由消息队列支持的带有 Spring 的两种方式 RMI
- html - 如何在段落中组合工具提示标签和段落边距标签?
- oracle - 如何通过批处理文件使用 sqlplus 进行动态假脱机
- python-3.x - 我第一次在我的windows上下载程序python
- bash - 从 postgres 函数/过程/触发器执行 Bash 脚本(Shell 脚本)