我正在遇到此错误 Fatal Exception: java.lang.IllegalStateException
This YouTubePlayer has been released
,但是release()
未明确称为。
if(youtubePlayer != null){
time = youtubePlayer.getCurrentTimeMillis();//exception may occur
}
是否可以检查youtubePlayer
是否是released
?有回调吗?谢谢。
YouTube SDK中的大多数代码被混淆,这确实很难调试。没有任何直接方法可以检查YouTubePlayer是否已发布也无济于事。
说,我认为使youtubeplayer null(在onstop(instop()中)似乎更像是 hack 对我而言。您应该在OnDestroy()中释放YouTubePlayer,并且不要在任何地方手动分配为null。一种简单的方法来检查YouTubePlayer是否已发布是打电话(例如youtubeplayer.loadvideo(),cuevideo(),cuevideo(),getCurrentTimeMillis()等),将其放入尝试catch块中,并捕获IllegalStateException。/strong>
根据错误:
的YouTube SDK文档公共静态最终YouTubePlayer.Errorrason Intirut_service_disconnection
播放已被取消,并且由于 与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();
}
我通过在活动的onDestroy
中进行录像机null解决了此问题。
编辑:
在onStop
中尝试的,它可以正常工作。
@mickeytin,谢谢..
youtubePlayer.getCurrentTimeMillis();
返回的变量类型是int
。
这应该有效:
if(youtubePlayer != null){
int millis = youtubePlayer.getCurrentTimeMillis();//exception may occur
}
这就是我设法摆脱此例外的方式。就我而言,它被扔在onsaveinstancestate上,我尝试使用相同的代码来保存当前的播放器位置:
if(youtubePlayer != null){ time = youtubePlayer.getCurrentTimeMillis(); }
和成功的播放器初始化在onitializationsuctescess中,我继续使用 time 从bundle中分配的值 time 。
但事实证明,这种方法是不必要的。为了避免例外投掷,我刚刚添加了android:configChanges="orientation|screenSize"
属性在我的播放器活动中。这使系统处理方向自身发生变化,并添加 time 参数来提示视频变得多余。这就是检查 wasrestored flag的方法
这是更改摘要:
androidmanifest.xml:
<activity android:name=".VideoPlayerActivity"
android:configChanges="orientation|screenSize"/>
videoplayeractivity.java:
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
this.mPlayer = player;
if (!wasRestored) {
mPlayer.loadVideo(mVideoId);
}
}