0

I am getting data from web service and storing that into lists according to the the title. e.g.If response contains Music it should add to music list and so on.There is no problem when data is coming from only single type like music ,movies .i am getting exception whenever there is two or more types are available and i am trying to set them in adapter.I searched the solution on google but found nothing useful to solve my problem.

Here is my Adapter class for Recycler view:

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







}

And here is my recycler view where i am getting dat.there is nothing wrong with it.but when two or more lists are not null means having data is creating exception in andapter.

  Call<HomeSearchAllPojo> caller = ApiClient.getInstance().getApiService().getHomeSearchDataWithPojo(queryName);
        caller.enqueue(new Callback<HomeSearchAllPojo>() {
            @Override
            public void onResponse(Call<HomeSearchAllPojo> call, Response<HomeSearchAllPojo> response) {
                if (response.body() != null) {
                    movieList = response.body().getMovies();
                }
                if (response.body() != null) {
                    premiumList = response.body().getPremium();
                }
                if (response.body() != null) {
                    musicList = response.body().getMusic();
                }
                if (response.body() != null) {
                    videoList = response.body().getVideos();
                }
                movieAdapter = new HomeSearchAdapter(getContext(), musicList, premiumList, videoList, movieList);
                recyclerView.setAdapter(movieAdapter);
            }

            @Override
            public void onFailure(Call<HomeSearchAllPojo> call, Throwable t) {

            }
        });

Error:

    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)
hey
  • 1
  • 2

1 Answers1

1

If the size of your array or Collection is 1, the maximal index is 0.

Java is 0-based, so, the first element you get by: myList.get(0); or myArray[0];

Your error message tells you, that you are trying to get the second element of an ArrayList which only contains one element.

EDIT: in your code, the problem might be here:

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

there, we know that i will be a valid index for your list, but that doesn't mean position is.

Stultuske
  • 9,296
  • 1
  • 25
  • 37
  • So basically how can i set the data if movieList and moviePremium lists are not null ? . – hey Mar 13 '19 at 08:16
  • setting and getting are not the same. trying to add an element won't give you this error. – Stultuske Mar 13 '19 at 08:29
  • I tried adding items = (movieList.size() + moviesPremium.size());but still getting the error. – hey Mar 13 '19 at 08:50
  • I have no idea what you tried to do with that code. to add an element, just use movieList.add(newElement); (assuming newElement is an instance of the type stored in movieList) – Stultuske Mar 13 '19 at 08:54
  • basically when i am getting data in movie list and movie premium list ,means the items =2 ,in that case i am getting the exception and i am unable to figure where i am making mistake.while in case of single list e.g. if data is in lusic list it works fine – hey Mar 13 '19 at 08:57
  • not really sure what you mean, but it seems that if you have one element in each List (two in total), you try to get two elements from the Lists, but the seperate Lists only contain 1 single element. – Stultuske Mar 13 '19 at 08:59
  • i guess that's the problem.and if that's the case whats the alternative to make it right – hey Mar 13 '19 at 09:00
  • not doing that. trying to access non-existing members will lead you to this. Just check the EDIT I did in my answer: i is a valid index there. position isn't. – Stultuske Mar 13 '19 at 09:02