Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.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 在android的recyclerview的adapterview中合并两个列表时获取IndexOutOfBoundsException_Java_Android_Android Recyclerview - Fatal编程技术网

Java 在android的recyclerview的adapterview中合并两个列表时获取IndexOutOfBoundsException

Java 在android的recyclerview的adapterview中合并两个列表时获取IndexOutOfBoundsException,java,android,android-recyclerview,Java,Android,Android Recyclerview,我从web服务获取数据,并根据标题将其存储到列表中。e、 g.如果响应包含音乐,则应将其添加到音乐列表等。当数据仅来自单一类型(如音乐、电影)时没有问题。每当有两种或两种以上类型可用时,我都会遇到异常,我正在尝试在适配器中设置它们。我在谷歌上搜索解决方案,但没有找到任何有用的方法来解决我的问题 以下是我的回收器视图适配器类: public class HomeSearchAdapter extends RecyclerView.Adapter<HomeSearchAdapter.H

我从web服务获取数据,并根据标题将其存储到列表中。e、 g.如果响应包含音乐,则应将其添加到音乐列表等。当数据仅来自单一类型(如音乐、电影)时没有问题。每当有两种或两种以上类型可用时,我都会遇到异常,我正在尝试在适配器中设置它们。我在谷歌上搜索解决方案,但没有找到任何有用的方法来解决我的问题

以下是我的回收器视图适配器类:

    public class HomeSearchAdapter extends RecyclerView.Adapter<HomeSearchAdapter.Holder> {

    Context context;

    List<Music> listMusic = new ArrayList<>();
    List<AllPremiumMovies> moviesPremium = new ArrayList<>();
    List<VideoPojo> listVideos = new ArrayList<>();
    List<Movie> movieList = new ArrayList<>();
    int items;

    private DisplayImageOptions options;
    public static Clickitem clickitem;


    @NonNull
    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.homesearchadapter, parent, false);
        return new Holder(view);
    }

    public HomeSearchAdapter(Context context, List<Music> listMusic, List<AllPremiumMovies> moviesPremium, List<VideoPojo> listVideos, List<Movie> movieList) {
        this.context = context;
        this.listMusic = listMusic;
        this.moviesPremium = moviesPremium;
        this.listVideos = listVideos;
        this.movieList = movieList;
    }

    @Override
    public void onBindViewHolder(@NonNull final Holder holder, final int position) {
        options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.moremovierealicon)
                .showImageForEmptyUri(R.drawable.moremovierealicon)
                .showImageOnFail(R.drawable.moremovierealicon)
                .cacheInMemory(true)
                .cacheOnDisk(true)
                .considerExifParams(true)
                .bitmapConfig(Bitmap.Config.RGB_565)
                .build();


//        getMusicData();//getting music data
//        getPreData();
//        getVideos();
        if (movieList != null && moviesPremium != null) {
            for (int i = 0; i < movieList.size(); i++) {
                holder.name.setText(movieList.get(position).getMovieName());
                holder.genre.setText(movieList.get(position).getNewGenere());
                holder.woods.setText(movieList.get(position).getNewWoods());
                holder.artistName.setVisibility(View.GONE);
                holder.rating.setText(movieList.get(position).getRating());
                holder.type.setText("Movie");

                ImageLoader.getInstance()
                        .displayImage(movieList.get(position).getThumbnail(), holder.imageView, options, new SimpleImageLoadingListener() {
                            @Override
                            public void onLoadingStarted(String imageUri, View view) {

                            }

                            @Override
                            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

                            }

                            @Override
                            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

                            }
                        }, new ImageLoadingProgressListener() {
                            @Override
                            public void onProgressUpdate(String imageUri, View view, int current, int total) {

                            }
                        });
            }
            for (int i = 0; i < moviesPremium.size(); i++) {
                holder.name.setText(moviesPremium.get(position).getMovieName());
                holder.genre.setText(moviesPremium.get(position).getNewGenre());
                holder.woods.setText(moviesPremium.get(position).getNewMovieWoods());
                holder.artistName.setVisibility(View.GONE);
                holder.rating.setText(moviesPremium.get(position).getRating());
                holder.type.setText("Premium Movie");

                ImageLoader.getInstance()
                        .displayImage(moviesPremium.get(position).getThumbnail(), holder.imageView, options, new SimpleImageLoadingListener() {
                            @Override
                            public void onLoadingStarted(String imageUri, View view) {

                            }

                            @Override
                            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

                            }

                            @Override
                            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

                            }
                        }, new ImageLoadingProgressListener() {
                            @Override
                            public void onProgressUpdate(String imageUri, View view, int current, int total) {

                            }
                        });
            }

        } else if (movieList != null) {
            holder.name.setText(movieList.get(position).getMovieName());
            holder.genre.setText(movieList.get(position).getNewGenere());
            holder.woods.setText(movieList.get(position).getNewWoods());
            holder.artistName.setVisibility(View.GONE);
            holder.rating.setText(movieList.get(position).getRating());
            holder.type.setText("Movie");

            ImageLoader.getInstance()
                    .displayImage(movieList.get(position).getThumbnail(), holder.imageView, options, new SimpleImageLoadingListener() {
                        @Override
                        public void onLoadingStarted(String imageUri, View view) {

                        }

                        @Override
                        public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

                        }

                        @Override
                        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

                        }
                    }, new ImageLoadingProgressListener() {
                        @Override
                        public void onProgressUpdate(String imageUri, View view, int current, int total) {

                        }
                    });

        } else if (moviesPremium != null) {
            holder.name.setText(moviesPremium.get(position).getMovieName());
            holder.genre.setText(moviesPremium.get(position).getNewGenre());
            holder.woods.setText(moviesPremium.get(position).getNewMovieWoods());
            holder.artistName.setVisibility(View.GONE);
            holder.rating.setText(moviesPremium.get(position).getRating());
            holder.type.setText("Premium Movie");

            ImageLoader.getInstance()
                    .displayImage(moviesPremium.get(position).getThumbnail(), holder.imageView, options, new SimpleImageLoadingListener() {
                        @Override
                        public void onLoadingStarted(String imageUri, View view) {

                        }

                        @Override
                        public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

                        }

                        @Override
                        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

                        }
                    }, new ImageLoadingProgressListener() {
                        @Override
                        public void onProgressUpdate(String imageUri, View view, int current, int total) {

                        }
                    });

        } else if (listMusic != null) {
            holder.name.setText(listMusic.get(position).getSongName());
            holder.genre.setText(listMusic.get(position).getCatName());
            holder.artistName.setText(listMusic.get(position).getArtist());
            holder.rating.setText(listMusic.get(position).getRating());
            holder.type.setText("Music");

            ImageLoader.getInstance()
                    .displayImage(listMusic.get(position).getThumbnailUrl(), holder.imageView, options, new SimpleImageLoadingListener() {
                        @Override
                        public void onLoadingStarted(String imageUri, View view) {

                        }

                        @Override
                        public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

                        }

                        @Override
                        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

                        }
                    }, new ImageLoadingProgressListener() {
                        @Override
                        public void onProgressUpdate(String imageUri, View view, int current, int total) {

                        }
                    });
        } else if (listVideos != null) {
            holder.genre.setText(listVideos.get(position).getNewVideoGenre());
            holder.woods.setText(listVideos.get(position).getNewVideoWoods());
            holder.rating.setVisibility(View.GONE);
            holder.artistName.setVisibility(View.GONE);
            holder.type.setText("Videos");

            ImageLoader.getInstance()
                    .displayImage(listVideos.get(position).getVideoThumb(), holder.imageView, options, new SimpleImageLoadingListener() {
                        @Override
                        public void onLoadingStarted(String imageUri, View view) {

                        }

                        @Override
                        public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

                        }

                        @Override
                        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

                        }
                    }, new ImageLoadingProgressListener() {
                        @Override
                        public void onProgressUpdate(String imageUri, View view, int current, int total) {

                        }
                    });
        }


        holder.constraintLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, holder.type.getText(), Toast.LENGTH_LONG).show();
                String typeOtype = String.valueOf(holder.type.getText());
                if (typeOtype.equals("Movies")) {
                    Toast.makeText(context, "will go to movie desc", Toast.LENGTH_LONG).show();
                } else if (typeOtype.contains("Music")) {
                    Intent intent = new Intent(context, MusicPlayerActivity.class);
                    intent.putExtra("pos", position);
                    Bundle args = new Bundle();
                    args.putSerializable("ARRAYLIST", (Serializable) listMusic);
                    intent.putExtra("BUNDLE", args);
                    context.startActivity(intent);

                } else if (typeOtype.equals("Premium Movie")) {
                    Intent intent = new Intent(context, PremiumDescriptionActivity.class);
                    intent.putExtra("movieId", position);
                    Bundle args = new Bundle();
                    args.putSerializable("PremiumMovieArrayList", (Serializable) moviesPremium);
                    intent.putExtra("BUNDLE", args);
                    context.startActivity(intent);
                } else if (typeOtype.contains("Videos")) {
                    Toast.makeText(context, "will go to video desc", Toast.LENGTH_LONG).show();
                    Intent intent = new Intent(context, MovieDescriptionActivity.class);
                    intent.putExtra("videoId", position);
                    Bundle args = new Bundle();
                    args.putSerializable("VideoArrayList", (Serializable) listVideos);
                    intent.putExtra("BUNDLE", args);
                    context.startActivity(intent);
                } else if (typeOtype.contains("Movies")) {
                    Intent intent = new Intent(context, MovieDescriptionActivity.class);
                    intent.putExtra("movieId", position);
                    Bundle args = new Bundle();
                    args.putSerializable("MovieArrayList", (Serializable) movieList);
                    intent.putExtra("BUNDLE", args);
                    context.startActivity(intent);
                } else {
                    Log.v("Exceptional Case in", "HomeSearchAdapter");
                }
            }
        });
    }

    @Override
    public int getItemCount() {


        if (movieList != null && moviesPremium != null) {

            items = (movieList.size());
            Log.v("size total", String.valueOf(items));
            Log.v("size total", String.valueOf(items));


        } else if (movieList != null) {
            items = movieList.size();
        } else if (moviesPremium != null) {
            items = moviesPremium.size();
        } else if (listMusic != null) {
            items = listMusic.size();
        } else if (listVideos != null) {
            items = listVideos.size();
        } else {
            Log.v("some error", "in home search adapter");
        }


        return items;
    }

    class Holder extends RecyclerView.ViewHolder {

        ImageView imageView;
        TextView name, artistName, type, rating, woods, genre;

        ConstraintLayout constraintLayout;


        public Holder(final View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.dataImage);
            name = itemView.findViewById(R.id.dataName);


            type = itemView.findViewById(R.id.dataType);
            rating = itemView.findViewById(R.id.dataRating);
            constraintLayout = itemView.findViewById(R.id.clickmelayout);
            artistName = itemView.findViewById(R.id.dataArtist);
            woods = itemView.findViewById(R.id.dataWoods);
            genre = itemView.findViewById(R.id.dataGenre);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    clickitem.onitemsclicklistener(getAdapterPosition(), view);

                }
            });

        }

    }

    public void setItemClick(Clickitem click) {
        HomeSearchAdapter.clickitem = click;
    }//setClick

    public interface Clickitem {
        void onitemsclicklistener(int position, View view);
    }







}

如果数组或集合的大小为1,则最大索引为0

Java是基于0的,因此,您获得的第一个元素:
myList.get(0)
myArray[0]

错误消息告诉您,您正在尝试获取仅包含一个元素的ArrayList的第二个元素

编辑:在代码中,问题可能出现在以下位置:

for (int i = 0; i < movieList.size(); i++) {
                holder.name.setText(movieList.get(position).getMovieName());
for(int i=0;i

在这里,我们知道我将是列表的有效索引,但这并不意味着位置是。

因此,如果movieList和moviePremium列表不为空,基本上我如何设置数据?设置和获取不一样。尝试添加元素不会给您带来此错误。我尝试添加项=(movieList.size()+moviePremium.size());但仍然会出现错误。我不知道您试图如何处理该代码。要添加元素,只需使用movieList.add(newElement);(假设newElement是存储在movieList中的类型的实例)基本上,当我在电影列表和电影高级列表中获取数据时,表示项目=2,在这种情况下,我得到的是异常,我无法确定我在哪里出错。而在单一列表的情况下,例如,如果数据在lusic列表中,则工作正常
    java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
        at java.util.ArrayList.get(ArrayList.java:437)
        at luck.materialdesign.tabsnavigator.adapters.HomeSearchAdapter.onBindViewHolder(HomeSearchAdapter.java:97)
        at luck.materialdesign.tabsnavigator.adapters.HomeSearchAdapter.onBindViewHolder(HomeSearchAdapter.java:46)
        at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781)
        at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823)
        at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752)
        at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6019)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
        at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
        at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
        at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
        at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
        at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3336)
        at android.view.View.measure(View.java:22071)
        at android.support.constraint.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)
        at android.support.constraint.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)
        at android.view.View.measure(View.java:22071)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at android.view.View.measure(View.java:22071)
        at android.support.constraint.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)
        at android.support.constraint.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)
        at android.view.View.measure(View.java:22071)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
        at android.view.View.measure(View.java:22071)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
        at android.view.View.measure(View.java:22071)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at android.view.View.measure(View.java:22071)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
        at android.view.View.measure(View.java:22071)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at com.android.internal.policy.DecorView.onMeasure(DecorView.java:724)
        at android.view.View.measure(View.java:22071)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2422)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1504)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1761)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1392)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6752)
2019-03-13 13:06:49.265 7078-7078/luck.materialdesign.tabsnavigator E/AndroidRuntime:     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
        at android.view.Choreographer.doCallbacks(Choreographer.java:723)
        at android.view.Choreographer.doFrame(Choreographer.java:658)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
for (int i = 0; i < movieList.size(); i++) {
                holder.name.setText(movieList.get(position).getMovieName());