android - 从 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)
解决方案
推荐阅读
- npm - 如何使用自己的 git 存储库在 package.json 中声明依赖项?
- c# - 为什么我们在使用 Microsoft.Build 库时会收到这个 InvalidProjectFileException 异常?
- python - Tensorflow 2.2:向量值输入/输出自定义层的自定义梯度
- .htaccess - 可以为每个请求设置 Accept-Ranges: bytes in .htaccess 吗?
- object - 如何在 Pure Data 中找到“s”对象的文档?
- c++ - 我的函数(detect_duplicates)中的核心转储具体的原因是什么?
- drawing - 如何编写程序来生成箱形图?
- if-statement - 在域 AD 中搜索用户
- linux - Yocto:找不到 getcap 和 setcap
- powershell - Powershell,如何快速处理?