我知道以前有人问过很多这个问题,但在我的情况下,我找不到解决办法。我请求获得关于POJO(电影)列表的json回复
虽然这是我第一次使用改型,但我在标题中遇到了问题。我正在创建的url是正确的,下面是响应的示例:
{
"page":1,
"total_results":19850,
"total_pages":993,
"results":[
{
"vote_count":855,
"id":420817,
"video":false,
"vote_average":7.2,
"title":"Aladdin",
"popularity":445.349,
"poster_path":"\/3iYQTLGoy7QnjcUYRJy4YrAgGvp.jpg",
"original_language":"en",
"original_title":"Aladdin",
"genre_ids":[
12,
14,
10749,
35,
10751
],
"backdrop_path":"\/v4yVTbbl8dE1UP2dWu5CLyaXOku.jpg",
"adult":false,
"overview":"A kindhearted street urchin named Aladdin embarks on a magical adventure after finding a lamp that releases a wisecracking genie while a power-hungry Grand Vizier vies for the same lamp that has the power to make their deepest wishes come true.",
"release_date":"2019-05-22"
},
{
"vote_count":5224,
"id":299537,
"video":false,
"vote_average":7.1,
"title":"Captain Marvel",
"popularity":399.859,
"poster_path":"\/AtsgWhDnHTq68L0lLsUrCnM7TjG.jpg",
"original_language":"en",
"original_title":"Captain Marvel",
"genre_ids":[
28,
12,
878
],
"backdrop_path":"\/w2PMyoyLU22YvrGK3smVM9fW1jj.jpg",
"adult":false,
"overview":"The story follows Carol Danvers as she becomes one of the universe’s most powerful heroes when Earth is caught in the middle of a galactic war between two alien races. Set in the 1990s, Captain Marvel is an all-new adventure from a previously unseen period in the history of the Marvel Cinematic Universe.",
"release_date":"2019-03-06"
},
这是我的模特
public class Movie implements Parcelable {
@PrimaryKey(autoGenerate = true)
private int id;
private String title;
private String releaseDate;
private String moviePoster;
private String avgVote;
private String plot;
private String movieId;
private String movieGenre;
@Ignore
public Movie(String title, String releaseDate, String moviePoster, String avgVote, String plot, String movieId, String movieGenre) {
this.title = title;
this.releaseDate = releaseDate;
this.moviePoster = moviePoster;
this.avgVote = avgVote;
this.plot = plot;
this.movieId = movieId;
this.movieGenre = movieGenre;
}
public Movie(int id, String title, String releaseDate, String moviePoster, String avgVote, String plot, String movieId, String movieGenre) {
this.id = id;
this.title = title;
this.releaseDate = releaseDate;
this.moviePoster = moviePoster;
this.avgVote = avgVote;
this.plot = plot;
this.movieId = movieId;
this.movieGenre = movieGenre;
}
public String getMovieGenre() {
return movieGenre;
}
public void setMovieGenre(String movieGenre) {
this.movieGenre = movieGenre;
}
public int getId() {
return id;
}
public void setId(int mID) {
this.id = mID;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getReleaseDate() {
return releaseDate;
}
public void setReleaseDate(String releaseDate) {
this.releaseDate = releaseDate;
}
public String getMoviePoster() {
return moviePoster;
}
public void setMoviePoster(String moviePoster) {
this.moviePoster = moviePoster;
}
public String getAvgVote() {
return avgVote;
}
public void setAvgVote(String avgVote) {
this.avgVote = avgVote;
}
public String getPlot() {
return plot;
}
public void setPlot(String plot) {
this.plot = plot;
}
public String getMovieId() {
return movieId;
}
public void setMovieId(String movieId) {
this.movieId = movieId;
}
protected Movie(Parcel in) {
title = in.readString();
releaseDate = in.readString();
moviePoster = in.readString();
avgVote = in.readString();
plot = in.readString();
movieId = in.readString();
movieGenre = in.readString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(title);
dest.writeString(releaseDate);
dest.writeString(moviePoster);
dest.writeString(avgVote);
dest.writeString(plot);
dest.writeString(movieId);
dest.writeString(movieGenre);
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<Movie> CREATOR = new Parcelable.Creator<Movie>() {
@Override
public Movie createFromParcel(Parcel in) {
return new Movie(in);
}
@Override
public Movie[] newArray(int size) {
return new Movie[size];
}
};
}
我的@GET
public interface JsonPlaceHolderApi {
@GET("popular")
Call<List<Movie>> getMovies(@Query("api_key") String api_key);
}
我的数据请求类
private static final String LOG_TAG = DataRequest.class.getSimpleName();
ArrayList<Movie> mMovies = null;
String jsonResponse = "";
private DataInterface mListener;
public DataRequest() {
super();
}
public void getData(String url) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.BASE_MOVIE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
JsonPlaceHolderApi jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);
Call<List<Movie>> call = jsonPlaceHolderApi.getMovies(Constants.API_KEY);
call.enqueue(new Callback<List<Movie>>() {
@Override
public void onResponse(Call<List<Movie>> call, Response<List<Movie>> response) {
if(response!=null && response.body()!=null && mListener!=null){
mListener.responseData(response.body());
}
}
@Override
public void onFailure(Call<List<Movie>> call, Throwable t) {
Log.d(LOG_TAG, "response code throwable " + t);
}
});
}
public void setOnDataListener(DataInterface listener) {
mListener = listener;
}
public interface DataInterface {
void responseData( List<Movie> myResponse );
}
}
最后,我想在我的主要活动中做些什么
prefSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
userOption = prefSpinner.getSelectedItem().toString();
Log.d(LOG_TAG, "user option is "+ userOption);
if (userOption.contentEquals("Most Popular") || userOption.contentEquals("Highest Rated")) {
DataRequest dataRequest = new DataRequest();
dataRequest.setOnDataListener(new DataRequest.DataInterface() {
@Override
public void responseData(List<Movie> myResponse) {
mMoviesList = myResponse;
}
});
dataRequest.getData(userOption);
movieRecycleViewAdapter.swapData(mMoviesList);
} else if(userOption.contentEquals("Favorites")) {
setUpViewModel();
movieRecycleViewAdapter.notifyDataSetChanged();
}
}
我请求一个关于POJO(电影)列表的json响应
不,你不是。如果查看JSON输出,它是一个JSON对象,而不是JSON数组。它的results
属性中包含一个JSON数组。
你需要:
>
创建一个与JSON对象结构匹配的Java类(其中将包括一个列表)
将改装更改为返回
调用
这个错误又回来了! 我是改装的初学者,我看过这篇文章:改装:预期BEGIN_OBJECT但BEGIN_ARRAY 但是即使我试着让它适应我的模型,我仍然不能让它工作。所以我的错误是: 我得到的是: 解析类的属性: IoTGenericDevice子类的属性: 改装电话: 经理:
当我只收到列表中的一个项目时,就会出现这个错误。我在服务器端REST Web服务中使用Jersey,只有当列表返回一个元素时,以及当它有但当它有多个异常时,它工作得非常完美,我就是这样做的: Jersey为什么不发送包含一个项目的列表?是泽西岛的虫子吗?有没有办法让它始终序列化为数组? 这是web服务返回0元素时的JSON数据: 这是web服务返回1个元素时的JSON数据: 当web服务返回超过1
您好,我是新来的改装库,我有问题解析一些json。我已经研究了Stackoverflow的一些其他解决方案,但我的问题没有太多的运气。我正在尝试一个简单的网络服务。如有任何建议,将不胜感激。。 json文件 请求方法 Employees.java 雇员萨皮。JAVA 我得到的错误是 我理解错误是说数据是一个对象,它应该以数组开头,但我无法计算出来。。谢谢
问题内容: 我是JSON解析的新手,我使用Square的Retrofit库并遇到了这个问题。 我正在尝试解析此JSON响应: 这是我的模型: 我的界面: 我的成功方法: 当我将其用于成功方法时,会引发错误 预期为BEGIN_OBJECT,但在第1行column2处为BEGIN_ARRAY 怎么了 问题答案: 现在,你正在解析响应,就好像它是这样格式化的: 异常告诉你,你期望在根目录有一个对象,但实
嗨,我是改装2.0库的新手,我在解析一些json时遇到了问题。我在Stackoverflow上看了一些其他的解决方案,但我的问题运气不佳。我试图用改装2.0从Android系统调用一个api。但它抛出了预期的错误BEGIN_ARRAY但BEGIN_OBJECT。 我对web api的回应是: 这就是我的模型类: 这是我的界面: 这就是我打电话的方式:
使用改装库来使用一项服务,我为我的界面、模型以及如何使用界面添加了代码。 我不断收到一个GSON抛出的“预期的BEGIN_对象,但是BEGIN_数组” 界面 模范公立班学生{ 我怎么称呼方法