Java Android:youtube播放器已经发布

Java Android:youtube播放器已经发布,java,android,youtube-api,android-youtube-api,Java,Android,Youtube Api,Android Youtube Api,我得到了这个错误致命异常:java.lang.IllegalStateException 此YouTubePlayer已发布,但未显式调用release()。以下是发生崩溃的代码片段: if(youtubePlayer != null){ time = youtubePlayer.getCurrentTimeMillis();//exception may occur } 是否可以检查youtubePlayer是否已发布?有回电吗?谢谢。youtubeplyer.getCurrentTime

我得到了这个错误
致命异常:java.lang.IllegalStateException
此YouTubePlayer已发布
,但未显式调用
release()
。以下是发生崩溃的代码片段:

if(youtubePlayer != null){
 time = youtubePlayer.getCurrentTimeMillis();//exception may occur
}

是否可以检查
youtubePlayer
是否已发布
?有回电吗?谢谢。

youtubeplyer.getCurrentTimeMillis()返回的变量类型
是一个
int

这应该起作用:

if(youtubePlayer != null){
 int millis = youtubePlayer.getCurrentTimeMillis();//exception may occur
}

我通过在Activity的
onDestroy
中使videoPlayer为空解决了这个问题

编辑:

在顶部的
中试用,效果良好。


@米奇汀,谢谢

Youtube SDK中的大部分代码都是模糊的,这使得调试非常困难。事实上,没有任何直接的方法来检查YoutubePlayer是否已被释放,也没有帮助

话虽如此,我认为使YoutubePlayer为null(在onStop()中)对我来说似乎更像是一种黑客行为,而不是一个合适的解决方案。您应该在onDestroy()中释放YouTubeplyer,不要在任何地方手动将其指定为null。检查YoutubePlayer是否已释放的一种简单方法是将调用(如YoutubePlayer.loadVideo()、cueVideo()、getCurrentTimeMillis()等)放入try-catch块并捕获非法状态异常。

根据有关错误的说明:

public static final YouTubePlayer.ErrorReason 意外的\u服务\u断开

播放已取消,播放机因故障已释放 与YouTube API服务的意外断开连接。再进一步 调用此玩家实例将导致错误,新玩家 必须创建实例才能重新启用播放

因此,要创建YoutubePlayer的新实例,只需调用catch块中的initialize()方法。

例如:

public void setVideoId(final String videoId) {
    if (videoId != null && !videoId.equals(this.videoId)) {
        this.videoId = videoId;
        if (youtubePlayer != null) {
            try {
                youtubePlayer.loadVideo(videoId);
            } catch (IllegalStateException e) {
                initialize(API_KEY, this);
            }
        }
    }
}

@Override
public void onDestroy() {   
    if (youtubePlayer != null) {
        youtubePlayer.release();
    }
    super.onDestroy();
}

这就是我设法摆脱这个异常的方法。在我的例子中,它被抛出到onSaveInstanceState上,我试图使用相同的代码保存当前玩家的位置:

if(youtubePlayer != null){ time = youtubePlayer.getCurrentTimeMillis(); }
在onInitializationSuccess中成功初始化播放器后,我使用onCreate from Bundle中指定的时间值继续播放视频

但事实证明,这种做法是不必要的。为了避免异常抛出,我刚刚在清单中为我的播放器活动添加了
android:configChanges=“orientation | screenSize”
属性。这使得系统自行处理方向变化,并且向视频提示添加time参数变得多余。这就是在onInitializationSuccess中检查wasreconded标志的目的

以下是更改摘要:

AndroidManifest.xml:

<activity android:name=".VideoPlayerActivity"
android:configChanges="orientation|screenSize"/>

你可以发布你是如何创建youtubePlayer实例的吗?您的活动是否实现了任何侦听器?您使用的是YouTubePlayerFragment还是YouTubePlayerView或YouTubeStandalonePlayer@Kakarot,您好,我正在使用YouTubePlayerSupportFragment`-用于yt视图和玩家的
YouTubePlayer
界面。以下是初始化代码:
youTubeView.initialize(YouTubeUtils.DEVELOPER_键,mPlayerInitializedListener)
我在这个回调中得到了播放器的实例:
public void onInitializationSuccess(YouTubePlayer.Provider,最终的YouTubePlayer播放器,布尔值被还原){…}
。ThanksJava是一种强类型语言在我的情况下,播放器可以在
onDestroy
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
        this.mPlayer = player;
        if (!wasRestored) {
            mPlayer.loadVideo(mVideoId);
        }
    }