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

时间:2017-05-30 18:29:25

标签: java android youtube

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

这是我的Java代码:     @覆盖     protected void onCreate(Bundle savedInstanceState){         super.onCreate(savedInstanceState);         的setContentView(R.layout.activity_youtube);         工具栏工具栏=(工具栏)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);
} }

问题解决了

2 个答案:

答案 0 :(得分:0)

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

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

您可以从查看此相关问题中受益:

findFragmentById return null

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

尝试使用:

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

答案 1 :(得分:0)

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

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

    <View
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/gray90"/>
    
    
    
    <FrameLayout
        android:padding="20dp"
        android:id="@+id/youtubeContent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    
  2. 然后我创建了一个youtube片段的实例,如下所示

    youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance();

  3. 然后我使用下面的标准方法替换它: -

    FragmentManager manager = getFragmentManager();     FragmentTransaction transaction = manager.beginTransaction();     transaction.replace(R.id.youtubeContent,youTubePlayerFragment).commit();

  4. 我希望这有助于其他人