Android:如何正确初始化 YouTube 播放器内部 Activity ?

标签 android exception youtube initialization

我正在尝试在 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/

相关文章:

c# - 抛出 KeyNotFoundException 时,如何查看未找到哪个 key ?

java - 了解 E 类抛出的表达式

java - Spring Boot 抛出异常时不显示自定义错误

python - 无法从 Youtube Data API V3 [Python] 获得所有评论

android - 无法生成未分配的apk文件

android - 如何使用 ActionBar sherlock ?

java - 配对蓝牙设备时出现 NullPointerException

video - YouTube 数据 API (v3) : Getting video source url

javascript - 多个视频作为背景 : HTML5 or YouTube?

android - 如何在android上启动 'View Contact' Activity?