我正在尝试在 Activity 中启动 YouTube 播放器。然而,我不时地收到这个异常(exception):
Fatal Exception: java.lang.IllegalStateException YouTubeServiceEntity not initialized
以下是我尝试在我的 Activity 中初始化 YouTube 播放器的方法。 (这是在 OnCreate() 内部完成的)
try {
final YouTubePlayerView youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view);
youTubeView.initialize("KEY", new YouTubePlayer.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean Boolean) {
if(ad==null || ad.getVideo_urls() == null)
return;
if (!Boolean)
{
try {
if (ad.getVideo_urls() != null && ad.getVideo_urls().length() > 0) {
String url = ad.getVideo_urls().getString(0);
if (url.contains("youtube")) {
String id = ad.getVideo_urls().getString(0).split("embed/")[1];
youTubeView.setVisibility(View.VISIBLE);
MyYouTubePlayer = youTubePlayer;
MyYouTubePlayer.cueVideo(id);
}
} else {
youTubeView.setVisibility(View.GONE);
Log.i(Constants.getTag(), "Video not found");
//Making sure the MyYouTubePlayer is null and if not is being released
if(MyYouTubePlayer != null)
{
MyYouTubePlayer.release();
}
}
}
catch (JSONException e) {
youTubePlayer.release();
e.printStackTrace();
}
}
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
youTubeView.removeAllViews();
}
});
} catch(Exception e){
e.printStackTrace();
Log.e("Youtube", "error initializing youtube");
}
最奇怪的是这个问题并没有持续存在。它只是不时发生,我不知道为什么。你能告诉我是什么原因造成的吗?
这也是 logcat:
java.lang.IllegalStateException: YouTubeServiceEntity not initialized
at android.os.Parcel.readException(Parcel.java:1433)
at android.os.Parcel.readException(Parcel.java:1379)
at com.google.android.youtube.player.internal.l$a$a.a()
at com.google.android.youtube.player.internal.o.a()
at com.google.android.youtube.player.internal.ad.a()
at com.google.android.youtube.player.YouTubePlayerView.a()
at com.google.android.youtube.player.YouTubePlayerView$1.a()
at com.google.android.youtube.player.internal.r.g()
at com.google.android.youtube.player.internal.r$c.a()
at com.google.android.youtube.player.internal.r$b.a()
at com.google.android.youtube.player.internal.r$a.handleMessage()
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4960)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
at dalvik.system.NativeStart.main(NativeStart.java)
最佳答案
我现在在我的应用程序中也面临这个错误。当用户在没有正确初始化的情况下退出包含 Activity 的 Youtube 播放器 fragment 时,就会出现问题。它非常随机且不易重现。
我只是使用 try-catch 来避免它,幸运的是,它还没有被重现。
try {
mYouTubePlayerFragment.initialize(DEVELOPER_KEY, this);
} catch(IllegalStateException w){}
同样,这可能不是可靠的解决方案。
一种解决方案可能是在 OnBackPressed()
中检查 you-tube 播放器是否已初始化。
isInitializationComplete = false
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
isInitializationComplete = true;
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider,
YouTubeInitializationResult youTubeInitializationResult) {
isInitializationComplete = true;
}
@Override
public void onBackPressed() {
if(!isInitializationComplete) return;
}
试用 monkey 以更频繁地重现它。
adb shell monkey -p com.packagename -v 500
这里是 link为这个错误发布跟踪器。
关于Android:如何正确初始化 YouTube 播放器内部 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32946228/