Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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 在for循环中使用时无法从改装中获取数据_Java_Android_Api_Retrofit - Fatal编程技术网

Java 在for循环中使用时无法从改装中获取数据

Java 在for循环中使用时无法从改装中获取数据,java,android,api,retrofit,Java,Android,Api,Retrofit,我在使用MVVM,我在尝试循环一个整数列表,它有一些电影类型的id,我在使用改型,我有一个函数,它应该返回一个基于id的电影列表,但出于某种原因它工作 我试着将id传递给函数,它成功了,但是当我试图循环一个id列表以获得不同的结果并将它们放入一个RecyclerView时,它没有成功 主要活动: public class MainActivity extends AppCompatActivity { RecyclerView mMainRecycler; MoviesVie

我在使用MVVM,我在尝试循环一个整数列表,它有一些电影类型的id,我在使用改型,我有一个函数,它应该返回一个基于id的电影列表,但出于某种原因它工作

我试着将id传递给函数,它成功了,但是当我试图循环一个id列表以获得不同的结果并将它们放入一个RecyclerView时,它没有成功

主要活动:

public class MainActivity extends AppCompatActivity {


    RecyclerView mMainRecycler;
    MoviesViewModel moviesViewModel;
    MainRecyclerAdapter mainRecyclerAdapter;


    Context context = this;

    List<String> genresNames = new ArrayList<>();
    List<Integer> genresIds = new ArrayList<>();

    List<Movies.Result> listResults = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mMainRecycler = findViewById(R.id.main_recycler);
        mMainRecycler.setLayoutManager(new LinearLayoutManager(this));



        moviesViewModel = new ViewModelProvider(this).get(MoviesViewModel.class);

        moviesViewModel.getMoviesGenres();
        moviesViewModel.mutableMoviesGenres.observe(this, new Observer<List<MoviesGenres.GenresBean>>() {
            @Override
            public void onChanged(List<MoviesGenres.GenresBean> genresBeans) {

                for (int i = 0; i < genresBeans.size(); i++) {
                    genresIds.add(genresBeans.get(i).getId());
                    genresNames.add(genresBeans.get(i).getName());
                }
                mainRecyclerAdapter.addNames(genresNames);
            }
        });


        for(int i = 0; i < genresIds.size(); i++) {
            moviesViewModel.getMovieWithGenre(genresIds.get(i));
        }


        moviesViewModel.mutableMoviesWithGenre.observe(this, new Observer<List<Movies.Result>>() {
            @Override
            public void onChanged(List<Movies.Result> results) {
                listResults.addAll(results);
                mainRecyclerAdapter.addResults(listResults);
            }
        });

        mMainRecycler.setLayoutManager(new LinearLayoutManager(this));
        mainRecyclerAdapter = new MainRecyclerAdapter(context, genresNames, listResults);
        mMainRecycler.setAdapter(mainRecyclerAdapter);
    }


}
public类MainActivity扩展了AppCompatActivity{
回收车;
MoviesViewModel MoviesViewModel;
主回收适配器主回收适配器;
上下文=这个;
List genresNames=new ArrayList();
List genresIds=new ArrayList();
List listResults=新建ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMainRecycler=findViewById(R.id.main_回收商);
mMainRecycler.setLayoutManager(新的LinearLayoutManager(this));
moviesViewModel=newviewmodelprovider(this.get)(moviesViewModel.class);
moviesViewModel.getmoviesgeners();
moviesViewModel.mutablemoviesgeners.observe(这是一个新的观察者(){
@凌驾
更改后的公共void(列出genresBeans){
for(int i=0;i
视图模型:

public class MoviesViewModel extends ViewModel {

    public MutableLiveData<List<Movies.Result>> mutablePopularMovies = new MutableLiveData<>();

    public void getPopular(){

        MoviesClient.getInstance().getPopular().enqueue(new Callback<Movies>() {
            @Override
            public void onResponse(@NonNull Call<Movies> call, @NonNull Response<Movies> response) {
                if(response.isSuccessful() && response.body() != null) {
                    mutablePopularMovies.setValue(response.body().getResults());
                }
            }

            @Override
            public void onFailure(@NonNull Call<Movies> call, @NonNull Throwable t) {
                t.printStackTrace();
            }
        });


    }
    public MutableLiveData<List<Movies.Result>> mutableMoviesWithGenre = new MutableLiveData<>();
    public void getMovieWithGenre(int i){
        MoviesClient.getInstance().getMoviesWithGenre(i).enqueue(new Callback<Movies>() {
            @Override
            public void onResponse(@NonNull Call<Movies> call, @NonNull Response<Movies> response) {
                if(response.isSuccessful() && response.body() != null) {
                    mutableMoviesWithGenre.setValue(response.body().getResults());
                }
            }

            @Override
            public void onFailure(@NonNull Call<Movies> call, @NonNull Throwable t) {
                t.printStackTrace();
            }
        });
    }

    public MutableLiveData<List<MoviesGenres.GenresBean>> mutableMoviesGenres = new MutableLiveData<>();
    public void getMoviesGenres() {
        MoviesClient.getInstance().getMoviesByGenre().enqueue(new Callback<MoviesGenres>() {
            @Override
            public void onResponse(@NonNull Call<MoviesGenres> call, @NonNull Response<MoviesGenres> response) {
                if(response.isSuccessful() && response.body() != null) {
                    mutableMoviesGenres.setValue(response.body().getGenres());
                }
            }

            @Override
            public void onFailure(@NonNull Call<MoviesGenres> call, @NonNull Throwable t) {
                t.printStackTrace();
            }
        });
    }
}
公共类MoviesViewModel扩展了ViewModel{
public MutableLiveData mutablePopularMovies=新的MutableLiveData();
公共的{
MoviesClient.getInstance().getPopular().enqueue(新回调()函数){
@凌驾
public void onResponse(@NonNull调用,@NonNull响应){
if(response.issusccessful()&&response.body()!=null){
mutablePopularMovies.setValue(response.body().getResults());
}
}
@凌驾
public void onFailure(@NonNull Call Call,@NonNull Throwable t){
t、 printStackTrace();
}
});
}
public MutableLiveData mutableMoviesWithGenre=new MutableLiveData();
公共电影类型(int i){
MoviesClient.getInstance().getMovieswithGene(i).enqueue(新回调(){
@凌驾
public void onResponse(@NonNull调用,@NonNull响应){
if(response.issusccessful()&&response.body()!=null){
mutableMoviesWithGenre.setValue(response.body().getResults());
}
}
@凌驾
public void onFailure(@NonNull Call Call,@NonNull Throwable t){
t、 printStackTrace();
}
});
}
public MutableLiveData mutablemoviesgeners=new MutableLiveData();
公共无效GetMoviesTyres(){
MoviesClient.getInstance().getMoviesbyGene().enqueue(新回调(){
@凌驾
public void onResponse(@NonNull调用,@NonNull响应){
if(response.issusccessful()&&response.body()!=null){
setValue(response.body().getGenres());
}
}
@凌驾
public void onFailure(@NonNull Call Call,@NonNull Throwable t){
t、 printStackTrace();
}
});
}
}
Main RecycleServiceAdapter:

public class MainRecyclerAdapter extends RecyclerView.Adapter<MainRecyclerAdapter.MainViewHolder> {

    private Context mContext;
    private List<Movies.Result> moviesResults;
    private List<String> moviesNames;

    public MainRecyclerAdapter(Context context, List<String> moviesNames, List<Movies.Result> moviesResults) {
        this.mContext = context;
        this.moviesNames = moviesNames;
        this.moviesResults = moviesResults;
    }

    @NonNull
    @Override
    public MainRecyclerAdapter.MainViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new MainViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.category_rv_item, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull final MainRecyclerAdapter.MainViewHolder holder, int position) {
        holder.genresTv.setText(moviesNames.get(position));
        setCatItemRecycler(holder.mRecycler, moviesResults);
    }

    @Override
    public int getItemCount() {
        return moviesNames.size();
    }

    public void addNames(List<String> moviesGenres) {
        moviesNames.addAll(moviesGenres);
        notifyDataSetChanged();
    }

    public void addResults(List<Movies.Result> listResults) {
        moviesResults.addAll(listResults);
        notifyDataSetChanged();
    }

    public class MainViewHolder extends RecyclerView.ViewHolder {
        TextView genresTv;
        RecyclerView mRecycler;


        public MainViewHolder(@NonNull View itemView) {
            super(itemView);

            genresTv = itemView.findViewById(R.id.cat_title);
            mRecycler = itemView.findViewById(R.id.item_recycler);

        }
    }

    private void setCatItemRecycler(RecyclerView recyclerView, List<Movies.Result> moviesResults){

        MovieAdapter movieAdapter = new MovieAdapter(mContext, moviesResults);
        recyclerView.setLayoutManager(new LinearLayoutManager(mContext, RecyclerView.HORIZONTAL, false));
        recyclerView.setAdapter(movieAdapter);
    }

}
公共类MainRecyclerAdapter扩展了RecyclerView.Adapter{ 私有上下文; 私人名单电影结果; 私人名单电影名称; 公共MainRecyclerAdapter(上下文上下文、列表电影名称、列表电影结果){ this.mContext=上下文; this.moviesNames=moviesNames; this.moviesResults=moviesResults; } @非空 @凌驾 public MainRecyclerAdapter.MainViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){ 返回新的MainViewHolder(LayoutFlater.from(parent.getContext())。充气(R.layout.category_rv_item,parent,false)); } @凌驾 BindViewHolder上的公共无效(@NonNull final MainRecyclerAdapter.MainViewHolder,int位置){ holder.genresTv.setText(moviesNames.get(position)); setCatItemRecycler(holder.mRecycler,moviesResults); } @凌驾 public int getItemCount(){ 返回moviesNames.size(); } public void addNames(列出电影类型){ moviesNames.addAll(电影类型); notifyDataSetChanged(); } public void addResults(列表结果){ moviesResults.addAll(列表结果); notifyDataSetChanged(); } 公共类MainViewHolder扩展了RecyclerView.ViewHolder{ TextView-genresTv; 回收器查看循环器; public MainViewHolder(@NonNull View itemView){ 超级(项目视图); genresTv=itemView.findviewbyd(R.id.cat_title); mRecycler=itemView.findviewbyd(R.id.item\u recycler); } } 私有void setCatItemRecycler(

public class MovieAdapter extends RecyclerView.Adapter<MovieAdapter.MovieViewHolder> {


    private List<Movies.Result> moviesResult;
    private Context mContext;

    public MovieAdapter(Context context, List<Movies.Result> moviesResult) {
        this.moviesResult = moviesResult;
        this.mContext = context;
    }

    @NonNull
    @Override
    public MovieAdapter.MovieViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new MovieViewHolder(LayoutInflater.from(mContext).inflate(R.layout.movie_item, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull MovieAdapter.MovieViewHolder holder, int position) {
        String imageUrl = MoviesClient.IMAGE_URL + moviesResult.get(position).getPosterPath();
        Glide.with(holder.mPosterImage.getContext()).load(imageUrl).into(holder.mPosterImage);
    }

    @Override
    public int getItemCount() {
        return moviesResult.size();
    }


    public class MovieViewHolder extends RecyclerView.ViewHolder {

        ImageView mPosterImage;
        public MovieViewHolder(@NonNull View itemView) {
            super(itemView);

            mPosterImage = itemView.findViewById(R.id.poster_image);
        }
    }
}
public void updateGenres(List<Genres> genres){
    listResults.addAll(genres);
    this.notifyDataSetChanged();
}