2017-05-30 13 views
0

YouTubeプレーヤーがクラッシュし、その理由がわかりません。YouTube Playerがクラッシュする(null例外オブジェクト、ヌルオブジェクト参照)

これは私のJavaコードです:

public class YoutubeActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener, YouTubePlayer.OnInitializedListener { 

private YouTubePlayerSupportFragment playerFragment; 
private YouTubePlayer mPlayer; 
private String YouTubeKey = "I DO NOT PUBLISH MY KEY"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_youtube); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    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); 
} 


@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.nav_photo) { 

    } else if (id == R.id.nav_gallery) { 

    } else if (id == R.id.nav_video) { 

    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

@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("9rLZYyMbJic"); 
     mPlayer.loadVideo("9rLZYyMbJic"); 
    } 
    else 
    { 
     mPlayer.play(); 
    } 
} 

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

これは、クラッシュログです:

05 - 30 20: 14: 39.013 16232 - 16232/de.sammy.flugradarlive E/AndroidRuntime: FATAL EXCEPTION: main 
Process: de.sammy.flugradarlive, PID: 16232 
java.lang.RuntimeException: Unable to start activity ComponentInfo { 
    de.sammy.flugradarlive/de.sammy.flugradarlive.YoutubeActivity 
}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.youtube.player.YouTubePlayerSupportFragment.initialize(java.lang.String, com.google.android.youtube.player.YouTubePlayer$OnInitializedListener)' 
on a null object reference 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 2702) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 2767) 
at android.app.ActivityThread.access$900(ActivityThread.java: 177) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java: 1449) 
at android.os.Handler.dispatchMessage(Handler.java: 102) 
at android.os.Looper.loop(Looper.java: 145) 
at android.app.ActivityThread.main(ActivityThread.java: 5951) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java: 372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 1400) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 1195) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.youtube.player.YouTubePlayerSupportFragment.initialize(java.lang.String, com.google.android.youtube.player.YouTubePlayer$OnInitializedListener)' 
on a null object reference 
at de.sammy.flugradarlive.YoutubeActivity.onCreate(YoutubeActivity.java: 50) 
at android.app.Activity.performCreate(Activity.java: 6289) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1119) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 2655) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 2767) 
at android.app.ActivityThread.access$900(ActivityThread.java: 177) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java: 1449) 
at android.os.Handler.dispatchMessage(Handler.java: 102) 
at android.os.Looper.loop(Looper.java: 145) 
at android.app.ActivityThread.main(ActivityThread.java: 5951) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java: 372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 1400) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 1195) 
05 - 30 20: 14: 41.055 16232 - 16232/de.sammy.flugradarlive I/Process: Sending signal.PID: 16232 SIG: 9 
+0

を役に立てば幸い? – RaceYouAnytime

+0

私が持っているので、<フラグメント アンドロイド:ID = "@ + ID/youtube_player_fragment" アンドロイド:名= "com.google.android.youtube.player.YouTubePlayerFragment" アンドロイド:layout_width = "match_parent" アンドロイド:layout_height =」 wrap_content "/>私のcontent_youtube.xml –

答えて

0

今、我々は決定的にこの質問に答えるために、いくつかの追加情報が必要ですが、この行があることが表示されますnullを返します。これは、リソースXMLを見て、フラグメントを適切に取得していることを確認することを示唆しています。

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

あなたは、この関連の質問を見てとることから利益を得ることができる:私はこの問題は、リソースのXMLに、あなたがいないだということであり得ることを疑う

findFragmentById return null


をサポートライブラリを使用してフラグメントを宣言します。

は、使用してみてください:

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

私は方法playerFragment.initialize(YouTubeKey、this)と思った; nullを返す、それはない? –

+0

@FabianSawischa私は自分の答えに編集を加えました。サポートライブラリを使用するレイアウトで名前を切り替えることを試みましたか? – RaceYouAnytime

+0

ありがとうございました!あなたは私をたくさん助けました。 –

0

私はこれらの提案の多くを試したが、どれも私のために働いていません。私は最終的にコンテナの作成を終了し、実行時にYouTubeFragmentに置き換えました。これは私にとって完璧にうまくいった。私のレイアウトファイルにcontainerViewを作成し

  1. 、私のレイアウトファイルのその一部だけ

    <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. に注意してくださいそれから私は

    以下のようにユーチューブフラグメントのインスタンスを作成しました

    youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance();

  3. Iは次に以下のように標準的な方法を使用して置き換え -

    FragmentManagerマネージャ= getFragmentManager()。 FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.youtubeContent、youTubePlayerFragment).commit();

私は、フラグメントのXMLは、(R.id.youtube_player_fragment)のためにのように見えるんこれは他の人