title: Fatal Exception: java.lang.RuntimeException using youtube player
body: <p>I have an android app which uses youtube player to play videos from youtube data api. Recently I'm getting this error in my crash report to frequently.</p>
  
  <p>This is the crash report stack trace :</p>
  
  <pre><code>Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.abc/com.abc.videos.videoplayer.VideoPlayerActivity}: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: asc
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2423)
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483)
     at android.app.ActivityThread.access$900(ActivityThread.java:153)
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
     at android.os.Handler.dispatchMessage(Handler.java:102)
     at android.os.Looper.loop(Looper.java:148)
     at android.app.ActivityThread.main(ActivityThread.java:5441)
     at java.lang.reflect.Method.invoke(Method.java)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
  Caused by android.os.BadParcelableException: ClassNotFoundException when unmarshalling: asc
     at android.os.Parcel.readParcelableCreator(Parcel.java:2432)
     at android.os.Parcel.readParcelable(Parcel.java:2358)
     at android.os.Parcel.readValue(Parcel.java:2264)
     at android.os.Parcel.readSparseArrayInternal(Parcel.java:2675)
     at android.os.Parcel.readSparseArray(Parcel.java:1967)
     at android.os.Parcel.readValue(Parcel.java:2321)
     at android.os.Parcel.readArrayMapInternal(Parcel.java:2614)
     at android.os.BaseBundle.unparcel(BaseBundle.java:224)
     at android.os.Bundle.getSparseParcelableArray(Bundle.java:856)
     at com.android.internal.policy.PhoneWindow.restoreHierarchyState(PhoneWindow.java:2032)
     at android.app.Activity.onRestoreInstanceState(Activity.java:1015)
     at android.app.Activity.performRestoreInstanceState(Activity.java:970)
     at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1164)
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2396)
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483)
     at android.app.ActivityThread.access$900(ActivityThread.java:153)
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
     at android.os.Handler.dispatchMessage(Handler.java:102)
     at android.os.Looper.loop(Looper.java:148)
     at android.app.ActivityThread.main(ActivityThread.java:5441)
     at java.lang.reflect.Method.invoke(Method.java)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
  </code></pre>
  
  <p>My code for youtube player is here :</p>
  
  <pre><code>public class VideoPlayerActivity extends YouTubeFailureRecoveryActivity implements
      YouTubePlayer.OnFullscreenListener, View.OnClickListener,VideoPlayerContract.View {
  
  private String TAG = "VideoPlayerActivity";
  
  @BindView(R.id.youtube_player)
  YouTubePlayerView mYouTubePlayerView;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_video_player);
      ButterKnife.bind(this);
      doLayout();
  }
  
  @Override
  public void onFullscreen(boolean isfullscreen) {
      fullscreen = isfullscreen;
      Log.d(TAG, String.valueOf(fullscreen));
      if (!fullscreen){
          mToolBar.setVisibility(View.VISIBLE);
          mAppBarLayout.setExpanded(true);
          setRequestedOrientation(PORTRAIT_ORIENTATION);
      } else {
          mToolBar.setVisibility(View.GONE);
          mAppBarLayout.setExpanded(false);
      }
      doLayout();
  }
  
  protected void onNewIntent(Intent intent) {
      mFeedInitiater = (FeedInitiater) intent.getSerializableExtra(Constants.FEEDINITIATER);
      mVideoID = intent.getStringExtra(Constants.VIDEOID);
      videoTitle = intent.getStringExtra(Constants.VIDEOTITLE);
      videoDescription = intent.getStringExtra(Constants.VIDEODESCRIPTION);
      videoPublishedDate = UtilsFunctions.getFeedsDate(intent
              .getLongExtra(Constants.VIDEOPUBLISHEDDATE,0));
      videoViews = intent.getStringExtra(Constants.VIDEOCOUNT);
      playVideo();
       }
  
  @Override
  public void onInitializationSuccess(YouTubePlayer.Provider provider,
                                      YouTubePlayer youTubePlayer, boolean wasRestored) {
  
      mYoutubePlayer = youTubePlayer;
  
      mYoutubePlayer = youTubePlayer;
      mYoutubePlayer.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CUSTOM_LAYOUT);
      int controlFlags = mYoutubePlayer.getFullscreenControlFlags();
      controlFlags |= YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE;
      mYoutubePlayer.setFullscreenControlFlags(controlFlags);
      mYoutubePlayer.setOnFullscreenListener(this);
      if (!wasRestored &amp;&amp; mVideoID != null &amp;&amp; !mVideoID.equals("")) {
          mYoutubePlayer.loadVideo(mVideoID);
      }
  }
  
  @Override
  protected YouTubePlayer.Provider getYouTubePlayerProvider() {
      return mYouTubePlayerView;
  }
  
  private void doLayout() {
      final LinearLayout.LayoutParams playerParams =
              (LinearLayout.LayoutParams) mYouTubePlayerView.getLayoutParams();
      if (fullscreen &amp;&amp; getResources().getConfiguration().orientation ==
              Configuration.ORIENTATION_LANDSCAPE) {
  
          new Handler().post(new Runnable() {
              @Override
              public void run() {
                  getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
  
                  final int flags =
                          View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                  | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                                  | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                                  | View.SYSTEM_UI_FLAG_FULLSCREEN
                                  | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                                  | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
  
                  getWindow().getDecorView().setSystemUiVisibility(flags);
                  final View decorView = getWindow().getDecorView();
                  decorView
                          .setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener()
                          {
  
                              @Override
                              public void onSystemUiVisibilityChange(int visibility)
                              {
                                  if((visibility &amp; View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
                                  {
                                  } else {
                                      mFeedsContent.setVisibility(View.GONE);
                                      playerParams.width = LinearLayout.LayoutParams.MATCH_PARENT;
                                      playerParams.height = LinearLayout.LayoutParams.MATCH_PARENT;
                                  }
                              }
                          });
              }
          });
      } else {
          new Handler().post(new Runnable() {
              @Override
              public void run() {
                  final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
                  getWindow().getDecorView().setSystemUiVisibility(flags);
                  getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
                  playerParams.width = LinearLayout.LayoutParams.MATCH_PARENT;
                  playerParams.height = LinearLayout.LayoutParams.WRAP_CONTENT;
                  mFeedsContent.setVisibility(View.VISIBLE);
              }
          });
      }
  }
  @Override
  protected void onResume() {
      super.onResume();
      if (mYoutubePlayer != null)
          mYoutubePlayer.play();
  }
  
  @Override
  protected void onPause() {
      super.onPause();
      if (mYoutubePlayer != null)
          mYoutubePlayer.pause();
  }
  @Override
  public void playVideo() {
      mYouTubePlayerView.initialize(Constants.YOUTUBEDEVELOPERKEY,this);
  }
  
  @Override
  public void setPresenter(VideoPlayerContract.Presenter presenter) {
      mPresenter = presenter;
      if (mFeedInitiater != FeedInitiater.FEEDS){
          mPresenter.loadVideoDetails(mVideoID);
      }
  }
  
  @Override
  public void onConfigurationChanged(Configuration newConfig) {
      super.onConfigurationChanged(newConfig);
      doLayout();
  }
  </code></pre>
  
  <p>In manifest file I have declared this :
  <code>
        &lt;activity android:name=".videos.videoplayer.VideoPlayerActivity"
   android:screenOrientation="sensor"android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/&gt;</code></p>
  
  <p>Is there any problem in my code or is this is the problem from youtube player and how to handle this problem?.</p>