当前位置: 首页 > 知识库问答 >
问题:

如何在我的SupportFragment中添加YouTube播放器?

相弘方
2023-03-14

我的XML代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    style="@style/Container.MainBackground"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment"
        android:layout_alignParentTop="true"
        android:id="@+id/youtube_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</RelativeLayout>

片断中的代码

public class VideoFragment extends YouTubePlayerSupportFragment implements YouTubePlayer.OnInitializedListener {

    static private final String DEVELOPER_KEY = "MyKey";
    static private final String VIDEO = "ToMpzhdUD1Q";
    static private final String VIDEO1 = "K77avo920Jc";
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View videoView = inflater.inflate(R.layout.video_fragment, container, false);
        getActivity().setTitle("Youtube");

        YouTubePlayerSupportFragment youTubePlayerSupportFragment = new YouTubePlayerSupportFragment();
        youTubePlayerSupportFragment.initialize(DEVELOPER_KEY, this);

        return videoView;
    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {

        List<String> list = new ArrayList<>();
        list.add(VIDEO);
        list.add(VIDEO1);
        youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
        youTubePlayer.cueVideos(list);

    }

    @Override
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {

        Toast.makeText(getContext(), "FAIL!" + youTubeInitializationResult.toString(), Toast.LENGTH_LONG)
                .show();

    }
}
getSupportFragmentManager().beginTransaction().replace(R.id.main_container,fragment).addToBackStack(null).commit();

java.lang.NullPointerException:试图对com.google.Android.YouTube.Player.YouTubePlayerSupportFragment.OnStart(未知源)上的空对象引用调用虚拟方法“void com.google.Android.YouTube.Player.YouTubePlayerView.a()”

共有1个答案

东博瀚
2023-03-14

这里的问题是,您覆盖了超级类YouTubePlayerSupportFragment中的onCreateView()方法,该方法不是抽象的,实际上有一个实现,如图所示:

    public View onCreateView(LayoutInflater var1, ViewGroup var2, Bundle var3) {
        this.c = new YouTubePlayerView(this.getActivity(), (AttributeSet)null, 0, this.a);
        this.a();
        return this.c;
    }

实际的变量名称和类型超出了本答案的范围。这里重要的是YouTubePlayerView在这里被实例化,并且您覆盖了该方法,因此当在onStart()方法中调用时(也在YouTubePlayerSupportFragment中找到)YouTubePlayerView是空的。

    public void onStart() {
        super.onStart();
        this.c.a();
    }

因此,基本上,您需要的唯一事情是实例化您的VideoFragment类,并且,如果您想要实际的视频,而不是黑盒,您需要在创建片断时初始化片断(像这样:)

    public VideoFragment()
    {
        this.initialize("yourAPIKeyHere", this);
    }
 类似资料:
  • 我正在制作RSS阅读器应用程序,我从URL获取RSS数据,RSS数据可以包含到YouTube视频链接。 下面是一个链接到youtube vide的例子: 而当我运行我的应用程序时,没有视频,全是黑色的,我无法播放。

  • 我很困惑。据我所知,我完全遵循这些例子。也许我遗漏了一个参数,但我找不到它是什么。 控制台响应没有项目,但我有3个公共播放列表。 [Log]对象(learnadaapi.html,第68行) etag: “\”m2yskBQFythfE4irbTIeOgYYfBU/Rk41fm-2TD0VG1yv0-bkUvcBi9s\“” 项目: [] (0) 类型:“youtube#channelList响应

  • 我已经创建了一个使用媒体播放器播放音频的应用程序,但即使其他应用程序(如youtube)开始播放视频,我的播放器也不会停止。 如何停止音频,如果其他应用程序开始播放音频。 我用过mediaPlayer。start();播放音频。 任何帮助都将不胜感激。

  • 我写了一段代码,在WKWebView中播放youtube视频。我想自动播放视频时,一个屏幕加载,也内联视频应该播放,而不是在新的屏幕。下面是我的代码。 我已经在Interface Builder中为WKWebView设置了配置。 有人能提供一个建议,在视图加载时自动播放它吗?

  • 我已经设法使用YouTubePlayer播放YouTube视频。然而,当我尝试使用YouTubePlayer播放直播流时,什么也没有发生。API支持播放实时流吗?如果是,我该怎么做?