Luchando con el fragmento de la ayuda del jugador de Youtube

Estoy tratando de usar el fragmento de soporte de Youtube Player en un fragmento, pero la aplicación siempre se bloquea (NullPointerException) y no he podido encontrar ningún post similar para solucionarlo.

Tengo import import android.support.v4.app.Fragment para que no debería ser el problema.

Así es como se ve mi clase de fragmento:

package com.example.activitydetector; import com.google.android.youtube.player.YouTubeBaseActivity; import com.google.android.youtube.player.YouTubeInitializationResult; import com.google.android.youtube.player.YouTubePlayer; import com.google.android.youtube.player.YouTubePlayer.OnInitializedListener; import com.google.android.youtube.player.YouTubePlayer.Provider; import com.google.android.youtube.player.YouTubePlayerFragment; import com.google.android.youtube.player.YouTubePlayerSupportFragment; import com.google.android.youtube.player.YouTubePlayerView; import systemManager.SystemManager; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; import android.widget.Toast; public class GuidelinesFragment extends YouTubePlayerSupportFragment { SystemManager sm; YouTubePlayerView youTubeView; String URL_VIDEO = "CaA-k1l0xa4"; String KEY_DEVELOPER = "AIzaSyBIIs0u0NXhsZguv8nCNvSzUmflTt7K1Ek"; public GuidelinesFragment() { super(); // TODO Auto-generated constructor stub } public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.youtube, container, false); YouTubePlayerSupportFragment youTubePlayerSupportFragment = (YouTubePlayerSupportFragment) getFragmentManager().findFragmentById(R.id.youtubeplayerfragment); youTubePlayerSupportFragment.initialize(KEY_DEVELOPER, new OnInitializedListener() { @Override public void onInitializationSuccess(Provider arg0, YouTubePlayer arg1, boolean arg2) { // TODO Auto-generated method stub arg1.cueVideo(URL_VIDEO); } @Override public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) { // TODO Auto-generated method stub } }); return view; } } 

Este es mi totalmente y simple "Youtube" de diseño:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <fragment android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment" android:id="@+id/youtubeplayerfragment" android:layout_width="match_parent" android:layout_height="wrap_content"/> 

Y este es el error que muestra el registro:

  11-30 16:33:56.419: W/dalvikvm(19375): threadid=1: thread exiting with uncaught exception (group=0x40f14258) 11-30 16:33:56.423: E/AndroidRuntime(19375): FATAL EXCEPTION: main 11-30 16:33:56.423: E/AndroidRuntime(19375): java.lang.NullPointerException 11-30 16:33:56.423: E/AndroidRuntime(19375): at com.google.android.youtube.player.YouTubePlayerSupportFragment.onStart(Unknown Source) 11-30 16:33:56.423: E/AndroidRuntime(19375): at android.support.v4.app.Fragment.performStart(Fragment.java:1484) 11-30 16:33:56.423: E/AndroidRuntime(19375): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:941) 11-30 16:33:56.423: E/AndroidRuntime(19375): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 11-30 16:33:56.423: E/AndroidRuntime(19375): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 11-30 16:33:56.423: E/AndroidRuntime(19375): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 11-30 16:33:56.423: E/AndroidRuntime(19375): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429) 11-30 16:33:56.423: E/AndroidRuntime(19375): at android.os.Handler.handleCallback(Handler.java:605) 11-30 16:33:56.423: E/AndroidRuntime(19375): at android.os.Handler.dispatchMessage(Handler.java:92) 11-30 16:33:56.423: E/AndroidRuntime(19375): at android.os.Looper.loop(Looper.java:137) 11-30 16:33:56.423: E/AndroidRuntime(19375): at android.app.ActivityThread.main(ActivityThread.java:4645) 11-30 16:33:56.423: E/AndroidRuntime(19375): at java.lang.reflect.Method.invokeNative(Native Method) 11-30 16:33:56.423: E/AndroidRuntime(19375): at java.lang.reflect.Method.invoke(Method.java:511) 11-30 16:33:56.423: E/AndroidRuntime(19375): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809) 11-30 16:33:56.423: E/AndroidRuntime(19375): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) 11-30 16:33:56.423: E/AndroidRuntime(19375): at dalvik.system.NativeStart.main(Native Method) 

Cualquier ayuda o indicio estaría profundamente agradecido. Ya he perdido alrededor de 4 horas sin suerte.

Me encontré con este problema antes y creo que el problema se derivó de tratar de inflar el diseño YouTubePlayerSupportFragment . Resolví mi problema creando un fragmento como este:

 public class PlayerYouTubeFrag extends YouTubePlayerSupportFragment { private String currentVideoID = "video_id"; private YouTubePlayer activePlayer; public static PlayerYouTubeFrag newInstance(String url) { PlayerYouTubeFrag playerYouTubeFrag = new PlayerYouTubeFrag(); Bundle bundle = new Bundle(); bundle.putString("url", url); playerYouTubeFrag.setArguments(bundle); return playerYouTubeFrag; } private void init() { initialize(DeveloperKey.DEVELOPER_KEY, new OnInitializedListener() { @Override public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) { } @Override public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { activePlayer = player; activePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT); if (!wasRestored) { activePlayer.loadVideo(getArguments().getString("url"), 0); } } }); } @Override public void onYouTubeVideoPaused() { activePlayer.pause(); } } 

Y luego llamar a una instancia del fragmento como este:

 PlayerYouTubeFrag myFragment = PlayerYouTubeFrag.newInstance("video_id"); getSupportFragmentManager().beginTransaction().replace(R.id.video_container, myFragment).commit(); 

Donde video_container en mi caso era un diseño de marco vacío.

CzarMatt lo clavó. Sólo para añadir a su respuesta, sin embargo, no olvide que necesita llamar al método init() . Para ello, siga el código de CzarMatt y añada una línea:

 public static PlayerYouTubeFrag newInstance(String url) { PlayerYouTubeFrag playerYouTubeFrag = new PlayerYouTubeFrag(); Bundle bundle = new Bundle(); bundle.putString("url", url); playerYouTubeFrag.setArguments(bundle); playerYouTubeFrag.init(); //This line right here return playerYouTubeFrag; } 

Además, ya que estoy seguro de que la gente se encontrará con el mismo problema que hice, a pesar de que CzarMatt lo mencionó anteriormente, sólo para reiterar, cuando se pasa una URL para el video, NO está pasando en la URL de YouTube

Es decir, con: "youtube.com/watch?v=z7PYqhABiSo&feature=youtu.be"

Estás pasando solo el ID de video

Es decir, use: "z7PYqhABiSo"

Dado que es la propia documentación de Google, sabe cómo jugar bien con el ID.

  • Aplicación de Android de Youtube Watch Me cerrando inesperadamente
  • YouTubePlayerSupportFragment en el elemento ListView es nulo
  • Transmisión en directo desde la aplicación de Android a Youtube
  • YouTubePlayerFragment no funciona (Reproduciendo) en CollapsingToolbarLayout
  • Pausa de la API de YouTube de YouTube cuando gira la pantalla u oculta el reproductor
  • Vídeo incrustado de youtube en el dispositivo táctil que muestra el menú contextual del botón derecho
  • API de YouTube para Android: YouTubePlayerFragment loading spinner
  • La API de Youtube no devuelve los resultados actualizados
  • YouTubeAndroidPlayer en Android se bloquea en play ()
  • No es capaz de recuperar buena calidad de vídeo url de youtube api en android appf
  • Youtube Api android autostart
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.