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