首页 > 解决方案 > 从 json 数据在 viewpager 中播放视频时在某些设备中崩溃

问题描述

*我正在制作一个应用程序,我正在从服务器获取所有视频列表并在垂直滑动时在 viewpager 中播放该应用程序,但在某些设备中使用 ArrayOutOfBoundException 在某些设备中在滑动时崩溃 *

我在 viewpager 适配器中设置列表的代码

if (list!= null){
                        if (list.size()>0){
                            setAdapter(list);
                        }
                    }

    private void setAdapter(List<VideosModel> list) {

    if (getActivity()!=null){

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
            {

            }

            @Override
            public void onPageSelected(int position) {

                video_position=position;
                Log.e("my_Position","video_position="+video_position+",");
                if (limit_vedio==video_position+1){
                    video_position=0;

                    loadVideoList();
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                //Log.e("my_Position","state,"+state+"");
            }
        });

        viewPagerAdapter=new ViewPagerAdapter(getActivity().getSupportFragmentManager(),list.size(),list,"home");
        viewPager.setAdapter(viewPagerAdapter);



        if (list!=null&&list.size()>4){
            viewPager.setOffscreenPageLimit(4);
        }
    }


}

我的适配器

    int video_size;
   private List<VideosModel> list;
   private String view_type;

 public ViewPagerAdapter(@NonNull FragmentManager fm, int video_size, List<VideosModel> list, String view_type) {
        super(fm);

        this.video_size = video_size;
        this.list = list;
        this.view_type = view_type;
        notifyDataSetChanged();
        Log.e("video_size",list.size()+"");
    }

    @NonNull
    @Override
    public Fragment getItem(int position) {


            ChildFragment childFragment=new ChildFragment();
        Log.e("video_size",list.get(position).getVideo()+"");
        if (list!=null&&list.size()!=0){
            try {
                Bundle bundle=new Bundle();
                bundle.putString(Commn.tbl_vedio_id,list.get(position).getTbl_vedio_id());
                bundle.putString(Commn.video_comments,list.get(position).getComments());
                bundle.putString(Commn.is_video_liked,list.get(position).getVideo_likes());
                bundle.putString(Commn.video_likes_count,list.get(position).getLikes());
                bundle.putString(Commn.video_url,list.get(position).getVideo());
                bundle.putString(Commn.video_shared,list.get(position).getShare());
                bundle.putString(Commn.user_image,list.get(position).getUser_image());
                bundle.putString(Commn.video_caption,list.get(position).getTag());
                bundle.putString(Commn.user_name,list.get(position).getUsername());
                bundle.putString(Commn.user_id,list.get(position).getUser_id());
                bundle.putString(Commn.is_Follow,list.get(position).getFollow());
                bundle.putString(Commn.from_view_videos,view_type);

                childFragment.setArguments(bundle);
            }catch (ArrayIndexOutOfBoundsException e){
                e.printStackTrace();
            }

        }

        return childFragment;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public int getItemPosition(@NonNull Object object) {
        return POSITION_NONE;
    }

日志猫

Fatal Exception: java.lang.IndexOutOfBoundsException: Index: 24, Size: 0
   at java.util.ArrayList.get(ArrayList.java:437)
   at com.lgt.dodo.Adapter.ViewPagerAdapter.getItem(ViewPagerAdapter.java:39)
   at androidx.fragment.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePagerAdapter.java:178)
   at androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010)

标签: androidandroid-viewpager

解决方案


推荐阅读