改装2 java.lang.IollegalStateException:应为BEGIN_ARRAY,但在第1行第2列路



我知道这不是第一次有人问这个问题,但使用Reformation2,我找不到正确的问题解决方案。我试图通过我的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);
}

根据您的共享响应,您将获得一个数组中的视频列表。因此,在访问列表之前,您需要先获取该信息。

public class MostPopularMovies{
@SerializedName("mostpopularmovies")
@Expose
private List<Video> mostpopularmovies = null;
public List<Video> getMostpopularmovies() {
return mostpopularmovies;
}
public void setMostpopularmovies(List<Video> mostpopularmovies) {
this.mostpopularmovies = mostpopularmovies;
}
}

你还需要修改你的代码如下

public interface MovieApi {
@GET("mostpopularmovies")
Call<MostPopularMovies> getPopularMovies(@Query("API-KEY") String apiKey);
}

您将需要根据此更新getPopulatData代码。

最新更新