Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reformation2 java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第2列路径处为BEGIN_对象$_Java_Android_Retrofit2 - Fatal编程技术网

Reformation2 java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第2列路径处为BEGIN_对象$

Reformation2 java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第2列路径处为BEGIN_对象$,java,android,retrofit2,Java,Android,Retrofit2,我知道这不是第一次有人问这个问题,但是改型2后我找不到解决问题的正确方法。我试图通过API获取电影列表,但应用程序抛出以下错误: 应为BEGIN_数组,但在第1行第2列路径处为BEGIN_对象$ 方法: private void getPopularData() { Retrofit retrofit = RetrofitClient.getRetrofitInstance(); MovieApi api = retrofit.create(MovieApi

我知道这不是第一次有人问这个问题,但是改型2后我找不到解决问题的正确方法。我试图通过API获取电影列表,但应用程序抛出以下错误:

应为BEGIN_数组,但在第1行第2列路径处为BEGIN_对象$

方法:

   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 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);
}
class MovieListResponse{
公开列出最受欢迎的电影;
}
公共接口电影API{
@获取(“最流行的电影”)
调用getPopularMovies(@Query(“API-KEY”)字符串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;
}

}
公共类大多数大众电影{
@SerializedName(“mostpopularmovies”)
@暴露
私有列表mostpopularmovies=null;
公共列表getMostpopularmovies(){
返回大多数流行电影;
}
public void setMostpopularmovies(列出mostpopularmovies){
this.mostpopularmavies=mostpopularmavies;
}
}
您还需要修改代码,如下所示

public interface MovieApi {

@GET("mostpopularmovies")
Call<MostPopularMovies> getPopularMovies(@Query("API-KEY") String apiKey);
}
公共接口电影API{
@获取(“最流行的电影”)
调用getPopularMovies(@Query(“API-KEY”)字符串apiKey);
}

您需要根据此更新getPopularData代码。

如果看到响应主体,则它是一个对象
{}
。正如你的错误所说,你需要一个
数组
,所以我想你需要进入数组
[{“title”:…}]
你的响应是一个包含电影列表的单一对象。你的模型应该是这样的:一定要共享你的视频class@PriyankaRajput请检查我的编辑。
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);
}