Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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 在PagerAdapter中应用程序关闭后Exoplayer未停止_Java_Android_Adapter_Exoplayer_Fragmentpageradapter - Fatal编程技术网

Java 在PagerAdapter中应用程序关闭后Exoplayer未停止

Java 在PagerAdapter中应用程序关闭后Exoplayer未停止,java,android,adapter,exoplayer,fragmentpageradapter,Java,Android,Adapter,Exoplayer,Fragmentpageradapter,我对Exoplayer有问题,无法在应用程序关闭后停止,或者在BottomNavigationView中更改片段,我从API中获取数据,并将其转换到处理数据的Recyclerview/适配器,然后使用PagerAdapter显示带有图像和视频的数据 我还尝试在片段中设置onDestroy,但不起作用 FeedAdapter.java public class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.ViewHolder>

我对Exoplayer有问题,无法在应用程序关闭后停止,或者在BottomNavigationView中更改片段,我从API中获取数据,并将其转换到处理数据的Recyclerview/适配器,然后使用PagerAdapter显示带有图像和视频的数据

我还尝试在片段中设置onDestroy,但不起作用

FeedAdapter.java

public class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.ViewHolder> {
    private final List<FeedData> feedList;
    private Activity context;
    private View.OnClickListener onClickListener;
    private SimpleExoPlayer videoPlayer;

    REST apiService =
            RestClient.getClient().create(REST.class);

    public FeedAdapter(Activity context, List<FeedData> feedList) {
        this.context = context;
        this.feedList = feedList;
        this.onClickListener = onClickListener;
    }

    public List<FeedData> getFeedData(){
        return feedList;
    }

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

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.mBinding.setFeed(feedList.get(position));

        Boolean isLiked = holder.mBinding.getFeed().getIsLiked();
        Boolean isSaved = holder.mBinding.getFeed().getIsSaved();
        String username = holder.mBinding.getFeed().getUsername();

        if (holder.mBinding.getFeed().getAvatar().length() > 0) {
            Glide.with(context).load(holder.mBinding.getFeed().getAvatar())
                    .diskCacheStrategy(DiskCacheStrategy.NONE)
                    .into(holder.mBinding.userAvatar);
        }

        holder.mBinding.username.setText(username);
        holder.mBinding.description.setHashtagModeColor(ContextCompat.getColor(context, R.color.fitnessm8_green));
        holder.mBinding.description.addAutoLinkMode(AutoLinkMode.MODE_HASHTAG, AutoLinkMode.MODE_MENTION);
        holder.mBinding.description.setAutoLinkText(holder.mBinding.getFeed().getDescription());
        holder.mBinding.likecount.setText(holder.mBinding.getFeed().getLikes().toString());
        holder.mBinding.likecounttext.setText(context.getResources().getString(R.string.likes));
        holder.mBinding.commentcount.setText(holder.mBinding.getFeed().getComments().size() + " " + context.getResources().getString(R.string.comments));
        holder.mBinding.viewMoreComment.setText(context.getResources().getString(R.string.view) + " " + holder.mBinding.getFeed().getComments().size() + " " + context.getResources().getString(R.string.comments));

        holder.mBinding.viewMoreComment.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });

        if (isLiked) {
            holder.mBinding.like.setLiked(true);
        } else {
            holder.mBinding.like.setLiked(false);
        }

        if (isSaved) {
            holder.mBinding.fav.setLiked(true);
        } else {
            holder.mBinding.fav.setLiked(false);
        }

        if (holder.mBinding.getFeed().getType().equals("image")) {
            if (holder.mBinding.getFeed().getMediaSet().size() > 1) {

                holder.mBinding.image.setVisibility(View.GONE);
                MultiMediaAdapter pagerAdapter = new MultiMediaAdapter(context, holder.mBinding.getFeed().getMediaSet());
                holder.mBinding.viewpagerId.setAdapter(pagerAdapter);

                ScrollingPagerIndicator pagerIndicator = holder.mBinding.indicator;
                pagerIndicator.attachToPager(holder.mBinding.viewpagerId);
            } else {
                holder.mBinding.viewpagerId.setVisibility(View.GONE);
                Glide.with(context).load(holder.mBinding.getFeed().getMediaSet().get(0).getFile())
                        .placeholder(R.drawable.image_placeholder)
                        .error(R.drawable.image_placeholder)
                        .into(holder.mBinding.image);
            }
        }
        if (holder.mBinding.getFeed().getType().equals("video")) {
                holder.mBinding.image.setVisibility(View.GONE);
                MultiMediaAdapter pagerAdapter = new MultiMediaAdapter(context, holder.mBinding.getFeed().getMediaSet());
                holder.mBinding.viewpagerId.setAdapter(pagerAdapter);

                ScrollingPagerIndicator pagerIndicator = holder.mBinding.indicator;
                pagerIndicator.attachToPager(holder.mBinding.viewpagerId);
        }

        holder.mBinding.clickUser.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(context, UserProfileActivity.class);
                i.putExtra("profileUserID", holder.mBinding.getFeed().getUserId());
                view.getContext().startActivity(i);
            }
        });
    }

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

    class ViewHolder extends RecyclerView.ViewHolder {

        ListItemFeedPhotoBinding mBinding;

        public ViewHolder(View itemView) {
            super(itemView);
            mBinding = DataBindingUtil.bind(itemView);
        }
    }

    @Override
    public int getItemViewType(int position) {
        return super.getItemViewType(position);
    }

    public interface ClickListener {
        void onClick(View view, int position);

        void onLongClick(View view, int position);
    }
}
public class MultiMediaAdapter extends PagerAdapter {
    private PlayerView simpleExoPlayerView;
    private SimpleExoPlayer player;
    private ImageView image;
    Context context;
    List<FeedMediaSet> Media_list;

    public MultiMediaAdapter(Context context, List<FeedMediaSet> Media_list) {
        this.context = context;
        this.Media_list = Media_list;
    }

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

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        FeedMediaSet mediaObj =  Media_list.get(position);

        if (mediaObj.getType().equals("image")) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view = inflater.inflate(R.layout.list_item_media_photo,container,false);

            image = view.findViewById(R.id.image);

            Glide.with(context).load(mediaObj.getFile())
                    .placeholder(R.drawable.image_placeholder)
                    .error(R.drawable.image_placeholder)
                    .into(image);

            container.addView(view);
            return view;
        } else if (mediaObj.getType().equals("video")) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view = inflater.inflate(R.layout.list_item_media_video,container,false);

            simpleExoPlayerView = view.findViewById(R.id.playerView);
            image = view.findViewById(R.id.image);
            image.setVisibility(View.GONE);

            initializePlayer(mediaObj.getFile(), mediaObj.getExtra());

            container.addView(view);
            return view;
        }
        return null;
    }

    private void initializePlayer(String uri, String extra) {

        player = ExoPlayerFactory.newSimpleInstance(context);

        try {
            Uri mp4VideoExtraUri = Uri.parse(uri);

            InputStream inputStream = context.getContentResolver().openInputStream(mp4VideoExtraUri);
            Drawable yourDrawable = Drawable.createFromStream(inputStream, extra);
            simpleExoPlayerView.setDefaultArtwork(yourDrawable);
        } catch (FileNotFoundException e) {
            Drawable yourDrawable = context.getResources().getDrawable(R.drawable.image_attach);
            simpleExoPlayerView.setDefaultArtwork(yourDrawable);
        }

        DataSource.Factory mediaDataSourceFactory = new DefaultDataSourceFactory(context, Util.getUserAgent(context, context.getResources().getString(R.string.app_name)));

        MediaSource videoSource = new ProgressiveMediaSource.Factory(mediaDataSourceFactory)
                .createMediaSource(Uri.parse(uri));
        player.setPlayWhenReady(false);
        player.prepare(videoSource);

        if (simpleExoPlayerView != null) simpleExoPlayerView.setPlayer(player);
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView((View) object);
        releasePlayer();
    }

    private void releasePlayer() {
        if (player != null) {
            player.release();
            player = null;
            simpleExoPlayerView.setPlayer(null);
        }
    }
}
公共类FeedAdapter扩展了RecyclerView.Adapter{
私人最终名单;
私人活动语境;
private View.OnClickListener OnClickListener;
私人SimpleExoPlayer视频播放器;
休息服务=
RestClient.getClient().create(REST.class);
公共FeedAdapter(活动上下文,列表feedList){
this.context=上下文;
this.feedList=feedList;
this.onClickListener=onClickListener;
}
公共列表getFeedData(){
返回反馈列表;
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.list\u item\u feed\u photo,parent,false);
返回新的ViewHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull ViewHolder,int位置){
holder.mBinding.setFeed(feedList.get(position));
Boolean isLiked=holder.mBinding.getFeed().getIsLiked();
布尔isSaved=holder.mBinding.getFeed().getIsSaved();
字符串username=holder.mBinding.getFeed().getUsername();
if(holder.mBinding.getFeed().getAvatar().length()>0){
Glide.with(context).load(holder.mBinding.getFeed().getAvatar())
.diskCacheStrategy(diskCacheStrategy.NONE)
.into(holder.mBinding.userAvatar);
}
holder.mBinding.username.setText(用户名);
holder.mBinding.description.setHashtagModeColor(ContextCompat.getColor(context,R.color.fitnessm8_green));
holder.mBinding.description.addAutoLinkMode(AutoLinkMode.MODE_标签,AutoLinkMode.MODE_提及);
holder.mBinding.description.setAutoLinkText(holder.mBinding.getFeed().getDescription());
holder.mBinding.likecount.setText(holder.mBinding.getFeed().getLikes().toString());
holder.mBinding.likecounttext.setText(context.getResources().getString(R.string.likes));
holder.mBinding.commentcount.setText(holder.mBinding.getFeed().getComments().size()+“”+context.getResources().getString(R.string.comments));
holder.mBinding.viewMoreComment.setText(context.getResources().getString(R.string.view)+“”+holder.mBinding.getFeed().getComments().size()+“”+context.getResources().getString(R.string.comments));
holder.mBinding.viewMoreComment.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
}
});
如果(islike){
holder.mBinding.like.setlike(true);
}否则{
holder.mBinding.like.setlike(false);
}
如果(已保存){
holder.mBinding.fav.setlike(true);
}否则{
holder.mBinding.fav.setlike(false);
}
if(holder.mBinding.getFeed().getType().equals(“image”)){
if(holder.mBinding.getFeed().getMediaSet().size()>1){
holder.mBinding.image.setVisibility(View.GONE);
MultiMediaAdapter pagerAdapter=新的MultiMediaAdapter(上下文,holder.mBinding.getFeed().getMediaSet());
holder.mBinding.viewpagerId.setAdapter(pagerAdapter);
ScrollingPagerIndicator pagerIndicator=holder.mBinding.indicator;
pagerIndicator.attachToPager(holder.mBinding.viewPageGrid);
}否则{
holder.mBinding.viewpagerId.setVisibility(View.GONE);
Glide.with(context).load(holder.mBinding.getFeed().getMediaSet().get(0.getFile())
.占位符(R.drawable.image_占位符)
.错误(R.drawable.image\u占位符)
.into(holder.mBinding.image);
}
}
if(holder.mBinding.getFeed().getType().equals(“视频”)){
holder.mBinding.image.setVisibility(View.GONE);
MultiMediaAdapter pagerAdapter=新的MultiMediaAdapter(上下文,holder.mBinding.getFeed().getMediaSet());
holder.mBinding.viewpagerId.setAdapter(pagerAdapter);
ScrollingPagerIndicator pagerIndicator=holder.mBinding.indicator;
pagerIndicator.attachToPager(holder.mBinding.viewPageGrid);
}
holder.mBinding.clickUser.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意图i=新意图(上下文,UserProfileActivity.class);
i、 putExtra(“profileUserID”,holder.mBinding.getFeed().getUserId());
view.getContext().startActivity(i);
}
});
}
@凌驾
public int getItemCount(){
返回feedList.size();
}
类ViewHolder扩展了RecyclerView.ViewHolder{
ListItemFeedPhotoBinding;
公共视图持有者(视图项视图){
超级(项目视图);
mBinding=DataBindingUtil.bind(itemView);
}
}
@凌驾
public int getItemViewType(int位置){
返回super.getItemViewType(位置);
}
公共界面ClickListener{
void onClick(视图,int位置);
仅长按无效(视图,int位置);
}
}
MultiMediaAdapter.java

public class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.ViewHolder> {
    private final List<FeedData> feedList;
    private Activity context;
    private View.OnClickListener onClickListener;
    private SimpleExoPlayer videoPlayer;

    REST apiService =
            RestClient.getClient().create(REST.class);

    public FeedAdapter(Activity context, List<FeedData> feedList) {
        this.context = context;
        this.feedList = feedList;
        this.onClickListener = onClickListener;
    }

    public List<FeedData> getFeedData(){
        return feedList;
    }

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

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.mBinding.setFeed(feedList.get(position));

        Boolean isLiked = holder.mBinding.getFeed().getIsLiked();
        Boolean isSaved = holder.mBinding.getFeed().getIsSaved();
        String username = holder.mBinding.getFeed().getUsername();

        if (holder.mBinding.getFeed().getAvatar().length() > 0) {
            Glide.with(context).load(holder.mBinding.getFeed().getAvatar())
                    .diskCacheStrategy(DiskCacheStrategy.NONE)
                    .into(holder.mBinding.userAvatar);
        }

        holder.mBinding.username.setText(username);
        holder.mBinding.description.setHashtagModeColor(ContextCompat.getColor(context, R.color.fitnessm8_green));
        holder.mBinding.description.addAutoLinkMode(AutoLinkMode.MODE_HASHTAG, AutoLinkMode.MODE_MENTION);
        holder.mBinding.description.setAutoLinkText(holder.mBinding.getFeed().getDescription());
        holder.mBinding.likecount.setText(holder.mBinding.getFeed().getLikes().toString());
        holder.mBinding.likecounttext.setText(context.getResources().getString(R.string.likes));
        holder.mBinding.commentcount.setText(holder.mBinding.getFeed().getComments().size() + " " + context.getResources().getString(R.string.comments));
        holder.mBinding.viewMoreComment.setText(context.getResources().getString(R.string.view) + " " + holder.mBinding.getFeed().getComments().size() + " " + context.getResources().getString(R.string.comments));

        holder.mBinding.viewMoreComment.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });

        if (isLiked) {
            holder.mBinding.like.setLiked(true);
        } else {
            holder.mBinding.like.setLiked(false);
        }

        if (isSaved) {
            holder.mBinding.fav.setLiked(true);
        } else {
            holder.mBinding.fav.setLiked(false);
        }

        if (holder.mBinding.getFeed().getType().equals("image")) {
            if (holder.mBinding.getFeed().getMediaSet().size() > 1) {

                holder.mBinding.image.setVisibility(View.GONE);
                MultiMediaAdapter pagerAdapter = new MultiMediaAdapter(context, holder.mBinding.getFeed().getMediaSet());
                holder.mBinding.viewpagerId.setAdapter(pagerAdapter);

                ScrollingPagerIndicator pagerIndicator = holder.mBinding.indicator;
                pagerIndicator.attachToPager(holder.mBinding.viewpagerId);
            } else {
                holder.mBinding.viewpagerId.setVisibility(View.GONE);
                Glide.with(context).load(holder.mBinding.getFeed().getMediaSet().get(0).getFile())
                        .placeholder(R.drawable.image_placeholder)
                        .error(R.drawable.image_placeholder)
                        .into(holder.mBinding.image);
            }
        }
        if (holder.mBinding.getFeed().getType().equals("video")) {
                holder.mBinding.image.setVisibility(View.GONE);
                MultiMediaAdapter pagerAdapter = new MultiMediaAdapter(context, holder.mBinding.getFeed().getMediaSet());
                holder.mBinding.viewpagerId.setAdapter(pagerAdapter);

                ScrollingPagerIndicator pagerIndicator = holder.mBinding.indicator;
                pagerIndicator.attachToPager(holder.mBinding.viewpagerId);
        }

        holder.mBinding.clickUser.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(context, UserProfileActivity.class);
                i.putExtra("profileUserID", holder.mBinding.getFeed().getUserId());
                view.getContext().startActivity(i);
            }
        });
    }

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

    class ViewHolder extends RecyclerView.ViewHolder {

        ListItemFeedPhotoBinding mBinding;

        public ViewHolder(View itemView) {
            super(itemView);
            mBinding = DataBindingUtil.bind(itemView);
        }
    }

    @Override
    public int getItemViewType(int position) {
        return super.getItemViewType(position);
    }

    public interface ClickListener {
        void onClick(View view, int position);

        void onLongClick(View view, int position);
    }
}
public class MultiMediaAdapter extends PagerAdapter {
    private PlayerView simpleExoPlayerView;
    private SimpleExoPlayer player;
    private ImageView image;
    Context context;
    List<FeedMediaSet> Media_list;

    public MultiMediaAdapter(Context context, List<FeedMediaSet> Media_list) {
        this.context = context;
        this.Media_list = Media_list;
    }

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

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        FeedMediaSet mediaObj =  Media_list.get(position);

        if (mediaObj.getType().equals("image")) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view = inflater.inflate(R.layout.list_item_media_photo,container,false);

            image = view.findViewById(R.id.image);

            Glide.with(context).load(mediaObj.getFile())
                    .placeholder(R.drawable.image_placeholder)
                    .error(R.drawable.image_placeholder)
                    .into(image);

            container.addView(view);
            return view;
        } else if (mediaObj.getType().equals("video")) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view = inflater.inflate(R.layout.list_item_media_video,container,false);

            simpleExoPlayerView = view.findViewById(R.id.playerView);
            image = view.findViewById(R.id.image);
            image.setVisibility(View.GONE);

            initializePlayer(mediaObj.getFile(), mediaObj.getExtra());

            container.addView(view);
            return view;
        }
        return null;
    }

    private void initializePlayer(String uri, String extra) {

        player = ExoPlayerFactory.newSimpleInstance(context);

        try {
            Uri mp4VideoExtraUri = Uri.parse(uri);

            InputStream inputStream = context.getContentResolver().openInputStream(mp4VideoExtraUri);
            Drawable yourDrawable = Drawable.createFromStream(inputStream, extra);
            simpleExoPlayerView.setDefaultArtwork(yourDrawable);
        } catch (FileNotFoundException e) {
            Drawable yourDrawable = context.getResources().getDrawable(R.drawable.image_attach);
            simpleExoPlayerView.setDefaultArtwork(yourDrawable);
        }

        DataSource.Factory mediaDataSourceFactory = new DefaultDataSourceFactory(context, Util.getUserAgent(context, context.getResources().getString(R.string.app_name)));

        MediaSource videoSource = new ProgressiveMediaSource.Factory(mediaDataSourceFactory)
                .createMediaSource(Uri.parse(uri));
        player.setPlayWhenReady(false);
        player.prepare(videoSource);

        if (simpleExoPlayerView != null) simpleExoPlayerView.setPlayer(player);
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView((View) object);
        releasePlayer();
    }

    private void releasePlayer() {
        if (player != null) {
            player.release();
            player = null;
            simpleExoPlayerView.setPlayer(null);
        }
    }
}
公共类多媒体适配器扩展了PagerAdapter{
私人播放视图simpleExoPlayerView;
私人SimpleExoPlayer;
私有图像查看图像;
语境;
列出媒体列表;
公共多媒体适配器(上下文,列表)