Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.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
Java 改型需要数组而不是对象_Java_Android_Json_Retrofit - Fatal编程技术网

Java 改型需要数组而不是对象

Java 改型需要数组而不是对象,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

您好,我是翻新2.0库的新手,解析一些json时遇到问题。我已经研究了Stackoverflow的一些其他解决方案,但我的问题没有太多的运气。我正试图从安卓2.0版本中调用一个api。但它抛出了一个错误,应该是BEGIN_数组,但它是BEGIN_对象

你知道我做错了什么吗

Fragment.java

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 ();
}