Java 改型需要数组而不是对象
您好,我是翻新2.0库的新手,解析一些json时遇到问题。我已经研究了Stackoverflow的一些其他解决方案,但我的问题没有太多的运气。我正试图从安卓2.0版本中调用一个api。但它抛出了一个错误,应该是BEGIN_数组,但它是BEGIN_对象 你知道我做错了什么吗 Fragment.javaJava 改型需要数组而不是对象,java,android,json,retrofit,Java,Android,Json,Retrofit,您好,我是翻新2.0库的新手,解析一些json时遇到问题。我已经研究了Stackoverflow的一些其他解决方案,但我的问题没有太多的运气。我正试图从安卓2.0版本中调用一个api。但它抛出了一个错误,应该是BEGIN_数组,但它是BEGIN_对象 你知道我做错了什么吗 Fragment.java ListView superListView; static Retrofit retrofit = null; @Override public void onCreate (@Nulla
ListView superListView;
static Retrofit retrofit = null;
@Override
public void onCreate (@Nullable Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
connect2();
}
private void connect2() {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
HomeApiService movieApiService = retrofit.create(HomeApiService.class);
Call<List<Movie3>> call = movieApiService.popularMovies2();
call.enqueue(new Callback<List<Movie3>>() {
@Override
public void onResponse(Call<List<Movie3>> call, Response<List<Movie3>> response) {
List<Movie3> myheroList2 = response.body();
String[] oneHeroes = new String[myheroList2.size()];
for (int i2 = 0; i2 < myheroList2.size(); i2++) {
oneHeroes[i2] = myheroList2.get(i2).getTitle();
}
superListView.setAdapter(new ArrayAdapter<String>(getActivity().getApplicationContext(),
android.R.layout.simple_list_item_2, oneHeroes));
}
@Override
public void onFailure(Call<List<Movie3>> call, Throwable throwable) {
Log.e("Error: ", throwable.toString());
}
});
}
好的……首先,你接受回复的POJO是不正确的。这是接受回应的关键部分。您的POJO应如下所示:
public class Result{
public boolean adult;
public String backdrop_path;
public List<int> genre_ids;
public int id;
public String original_language;
public String original_title;
public String overview;
public double popularity;
public String poster_path;
public String release_date;
public String title;
public boolean video;
public double vote_average;
public int vote_count;
}
公共类结果{
成人;
公共通道;
公共列表类型标识;
公共int id;
公共字符串源语言;
公共字符串原始标题;
公共字符串概述;
公众的双重声望;
公共小径;;
公共字符串发布日期;
公共字符串标题;
公共布尔视频;
公众双票平均;
公众投票计数;
}
公共类根目录{
公共int页;
公开名单结果;
公共int总页数;
公共int总结果;
}
其中root是类,result是另一个类。正如您所看到的,响应以列表的形式包含结果
家庭电话服务也应该是这样的:
public interface HomeApiService {
@GET("movie/popular?api_key=ffd597419be5a256066dc51c49bc659f")
Call<Root> popularMovies2 ();
}
公共接口HomeAPI服务{
@获取(“电影/流行?api_key=ffd597419be5a256066dc51c49bc659f”)
调用popularMovies2();
}
希望你明白了。添加必要的getter和setter。通常,使用JSON到POJO的在线转换器很容易。这里有一个:。。。。。将响应粘贴到JSON中,并转换POJO。将JSON响应与您的问题一起添加。……这是JSON响应,需要作为url给出,因为您的POJO类不正确。Movie3类?我是新来的,所以任何帮助/示例都会非常感谢。感谢您的帮助,在线json转换器将非常有用。我实现了这两个,但仍然坚持使用Fragment.java。如何在Fragment.java中使用Call?Call Call=movieApiService.popularMovies2();谢谢现在开始工作了。我想也许你可以直接引用“根”,这样就不会得到多维响应。使用“public void onResponse(Callcall,Responseresponse){”我似乎无法获取.size();或.get();methodsRoot=response.body();…这样做就可以了。如果这样做有效,请接受答案。是的,这样做有效。非常感谢您的帮助
public class Movie3 {
@SerializedName("title")
private String title;
public Movie3(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
}
public class Result{
public boolean adult;
public String backdrop_path;
public List<int> genre_ids;
public int id;
public String original_language;
public String original_title;
public String overview;
public double popularity;
public String poster_path;
public String release_date;
public String title;
public boolean video;
public double vote_average;
public int vote_count;
}
public class Root{
public int page;
public List<Result> results;
public int total_pages;
public int total_results;
}
public interface HomeApiService {
@GET("movie/popular?api_key=ffd597419be5a256066dc51c49bc659f")
Call<Root> popularMovies2 ();
}