Android – 挣扎与Youtube播放器支持片段

前端之家收集整理的这篇文章主要介绍了Android – 挣扎与Youtube播放器支持片段前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在片段中使用Youtube播放器支持片段,但是应用程序总是崩溃(NullPointerException),我还没有找到任何类似的文章解决它.

我有导入导入android.support.v4.app.Fragment,所以不应该是问题.

这是我的片段类如下所示:

  1. package com.example.activitydetector;
  2. import com.google.android.youtube.player.YouTubeBaseActivity;
  3. import com.google.android.youtube.player.YouTubeInitializationResult;
  4. import com.google.android.youtube.player.YouTubePlayer;
  5. import com.google.android.youtube.player.YouTubePlayer.OnInitializedListener;
  6. import com.google.android.youtube.player.YouTubePlayer.Provider;
  7. import com.google.android.youtube.player.YouTubePlayerFragment;
  8. import com.google.android.youtube.player.YouTubePlayerSupportFragment;
  9. import com.google.android.youtube.player.YouTubePlayerView;
  10. import systemManager.SystemManager;
  11. import android.app.Activity;
  12. import android.bluetooth.BluetoothAdapter;
  13. import android.os.Bundle;
  14. import android.support.v4.app.Fragment;
  15. import android.util.Log;
  16. import android.view.LayoutInflater;
  17. import android.view.View;
  18. import android.view.View.OnClickListener;
  19. import android.view.ViewGroup;
  20. import android.widget.Button;
  21. import android.widget.LinearLayout;
  22. import android.widget.Toast;
  23.  
  24. public class GuidelinesFragment extends YouTubePlayerSupportFragment {
  25.  
  26. SystemManager sm;
  27. YouTubePlayerView youTubeView;
  28. String URL_VIDEO = "CaA-k1l0xa4";
  29. String KEY_DEVELOPER = "AIzaSyBIIs0u0NXhsZguv8nCNvSzUmflTt7K1Ek";
  30.  
  31. public GuidelinesFragment() {
  32. super();
  33. // TODO Auto-generated constructor stub
  34. }
  35.  
  36. public void onCreate(Bundle savedInstanceState) {
  37. // TODO Auto-generated method stub
  38. super.onCreate(savedInstanceState);
  39.  
  40.  
  41. }
  42.  
  43. public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
  44.  
  45. View view = inflater.inflate(R.layout.youtube,container,false);
  46.  
  47.  
  48. YouTubePlayerSupportFragment youTubePlayerSupportFragment = (YouTubePlayerSupportFragment) getFragmentManager().findFragmentById(R.id.youtubeplayerfragment);
  49.  
  50. youTubePlayerSupportFragment.initialize(KEY_DEVELOPER,new OnInitializedListener() {
  51.  
  52. @Override
  53. public void onInitializationSuccess(Provider arg0,YouTubePlayer arg1,boolean arg2) {
  54. // TODO Auto-generated method stub
  55. arg1.cueVideo(URL_VIDEO);
  56. }
  57.  
  58. @Override
  59. public void onInitializationFailure(Provider arg0,YouTubeInitializationResult arg1) {
  60. // TODO Auto-generated method stub
  61.  
  62. }
  63. });
  64.  
  65. return view;
  66. }
  67.  
  68. }

这是我完全简单的“Youtube”布局:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. tools:context=".MainActivity" >
  7.  
  8. <fragment
  9. android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment"
  10. android:id="@+id/youtubeplayerfragment"
  11. android:layout_width="match_parent"
  12. android:layout_height="wrap_content"/>

这是日志显示错误

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

任何帮助或提示都将非常感激.我已经浪费了大约4个小时,没有运气.

解决方法

我以前碰到过这个问题,我相信这个问题源于试图夸大YouTubePlayerSupportFragment布局.我通过创建如下的片段来解决我的问题:
  1. public class PlayerYouTubeFrag extends YouTubePlayerSupportFragment {
  2.  
  3. private String currentVideoID = "video_id";
  4. private YouTubePlayer activePlayer;
  5.  
  6. public static PlayerYouTubeFrag newInstance(String url) {
  7.  
  8. PlayerYouTubeFrag playerYouTubeFrag = new PlayerYouTubeFrag();
  9.  
  10. Bundle bundle = new Bundle();
  11. bundle.putString("url",url);
  12.  
  13. playerYouTubeFrag.setArguments(bundle);
  14.  
  15. return playerYouTubeFrag;
  16. }
  17.  
  18. private void init() {
  19.  
  20. initialize(DeveloperKey.DEVELOPER_KEY,new OnInitializedListener() {
  21.  
  22. @Override
  23. public void onInitializationFailure(Provider arg0,YouTubeInitializationResult arg1) { }
  24.  
  25. @Override
  26. public void onInitializationSuccess(YouTubePlayer.Provider provider,YouTubePlayer player,boolean wasRestored) {
  27. activePlayer = player;
  28. activePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
  29. if (!wasRestored) {
  30. activePlayer.loadVideo(getArguments().getString("url"),0);
  31.  
  32. }
  33. }
  34. });
  35. }
  36.  
  37. @Override
  38. public void onYouTubeVideoPaused() {
  39. activePlayer.pause();
  40. }
  41. }

然后调用片段的实例,如下所示:

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

在我的情况下,video_container是一个空的框架布局.

猜你在找的Android相关文章