YouTube 播放器崩溃(java.lang.NullPointerException,空对象引用)

Posted

技术标签:

【中文标题】YouTube 播放器崩溃(java.lang.NullPointerException,空对象引用)【英文标题】:YouTube Player crashes (java.lang.NullPointerException, null object reference) 【发布时间】:2017-10-31 08:27:15 【问题描述】:

我的 YouTube 播放器崩溃了,我不知道为什么。

这是我的 Java 代码: @覆盖 protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_youtube); 工具栏工具栏 = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(工具栏);

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);


    playerFragment = (YouTubePlayerSupportFragment) getSupportFragmentManager().findFragmentById(R.id.youtube_player_fragment);
    playerFragment.initialize(YouTubeKey, this);




@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) 
    mPlayer = youTubePlayer;

    //Enables automatic control of orientation
    mPlayer.setFullscreenControlFlags(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION);

    //Show full screen in landscape mode always
    mPlayer.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE);

    //System controls will appear automatically
    mPlayer.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI); 

    if (!b) 
        mPlayer.cueVideo("xxx");
        mPlayer.loadVideo("xxx");
    
    else
    
        mPlayer.play();
    


@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) 
    mPlayer = null;
    String ausgabe = youTubeInitializationResult.toString();
    Log.d("hi", ausgabe);
 

问题解决了

【问题讨论】:

片段 XML 对于 (R.id.youtube_player_fragment) 是什么样的? 因为我有 【参考方案1】:

现在我们需要一些额外的信息来明确回答这个问题,但是这行似乎返回 null,这表明您想要查看您的资源 XML 并确保您正确地抓取了片段。

getSupportFragmentManager().findFragmentById(R.id.youtube_player_fragment);

您可能会受益于查看这个相关问题:

findFragmentById return null


我怀疑问题可能是在您的资源 XML 中,您没有使用支持库声明片段。

尝试使用:

<fragment
  android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment"

【讨论】:

我以为方法 playerFragment.initialize(YouTubeKey, this);返回null,不是吗? @F***Sawischa 我在我的答案中添加了一个编辑。您是否尝试过在布局中切换名称以使用支持库? 谢谢伙计!你帮了我很多。【参考方案2】:

我尝试了很多这些建议,但没有一个对我有用。我最终创建了一个容器,然后在运行时用 YouTubeFragment 替换它。这对我来说非常好。

    在我的布局文件中创建了一个 containerView,请注意它只是我的布局文件的一部分

    <View
        android:padding="10dp"
        android:layout_
        android:layout_
        android:background="@color/gray90"/>
    
    
    
    <FrameLayout
        android:padding="20dp"
        android:id="@+id/youtubeContent"
        android:layout_
        android:layout_/>
    

    然后我创建了一个 youtube 片段的实例,如下所示

    youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance();

    然后我使用以下标准方式替换它:-

    FragmentManager 管理器 = getFragmentManager(); FragmentTransaction 事务 = manager.beginTransaction(); transaction.replace(R.id.youtubeContent,youTubePlayerFragment).commit();

我希望这对其他人有所帮助

【讨论】:

以上是关于YouTube 播放器崩溃(java.lang.NullPointerException,空对象引用)的主要内容,如果未能解决你的问题,请参考以下文章

Android : youtube 播放器已发布

挣扎于 Youtube 播放器支持片段

在 Youtube Player API 中出现大量崩溃

IE11 JavaScript(错误:SCRIPT445)“对象不支持此操作”

移动到 youtube 应用程序时,Youtube SDK 因 DeadObjectException 崩溃

Youtube 视频显示在冲击波播放器中,而不是 youtube 视频