Reformation2 java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第2列路径处为BEGIN_对象$
我知道这不是第一次有人问这个问题,但是改型2后我找不到解决问题的正确方法。我试图通过API获取电影列表,但应用程序抛出以下错误: 应为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
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);
}