首页 > 解决方案 > 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;
    }

}

标签: javaandroidretrofit2

解决方案


您可以制作另一个模型类,例如,

class MovieListResponse {
    public List<Movie> mostpopularmovies;
}

public interface MovieApi {

    @GET("mostpopularmovies")
    Call<MovieListResponse> getPopularMovies(@Query("API-KEY") String apiKey);
}

推荐阅读