2015-10-16 31 views
1

我是Android新手試圖運行YouTube視頻。當我在XML文件中添加YouTubePlayerView它給我的錯誤:xml文件中的Youtubeapi錯誤

The following classes could not be instantiated: - com.google.android.youtube.player.YouTubePlayerView because of- "java.lang.IllegalStateException: A YouTubePlayerView can only be created with an Activity which extends YouTubeBaseActivity as its context."

我的XML文件:

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.youtubeapi.MainActivity" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/hello_world" /> 

    <com.google.android.youtube.player.YouTubePlayerView 
     android:id="@+id/youtube_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 
    </RelativeLayout> 

我的主要活動類:

package com.example.youtubeapi; 

    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.Provider; 

    import android.app.Activity; 
    import android.os.Bundle; 
    import android.view.Menu; 
    import android.view.MenuItem; 

    public class MainActivity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
     } 
     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.main, menu); 
      return true; 
     } 
     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      // Handle action bar item clicks here. The action bar will 
      // automatically handle clicks on the Home/Up button, so long 
      // as you specify a parent activity in AndroidManifest.xml. 
      int id = item.getItemId(); 
      if (id == R.id.action_settings) { 
       return true; 
      } 
      return super.onOptionsItemSelected(item); 
     } 
     @Override 
     public void onInitializationFailure(Provider arg0, 
       YouTubeInitializationResult arg1) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void onInitializationSuccess(Provider arg0, YouTubePlayer arg1, 
       boolean arg2) { 
      // TODO Auto-generated method stub 

     } 
    } 

,所以我已經做到了我活動現在延伸到YouTubeBaseActivity,但由於某些原因,我仍然收到錯誤消息。

+0

請發佈堆棧跟蹤 – warlock

回答

0

請確保您在libs文件夾中添加了「YouTubeAndroidPlayerApi」。

另外在的build.gradle文件中添加以下行:

compile files('libs/YouTubeAndroidPlayerApi.jar')

activity_main.xml中:

<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 

    <TextView android:text="@string/hello_world" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <com.google.android.youtube.player.YouTubePlayerView 
     android:id="@+id/youtube_player" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#fff"/> 

</RelativeLayout> 

MainActivity.java

package com.materialtheme.youtubetestproject; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 

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.YouTubePlayerView; 

public class MainActivity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener { 

    public static final String API_KEY = "AIzaSyDEDrYVfpbqDgD_EsNlsnsFJhcMP8WYjsM"; 
    public static final String videoID = "09R8_2nJtjg"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     YouTubePlayerView youTubePlayerView = (YouTubePlayerView) findViewById(R.id.youtube_player); 
     youTubePlayerView.initialize(API_KEY, MainActivity.this); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
      return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { 
     /** add listeners to YouTubePlayer instance **/ 
     player.setPlayerStateChangeListener(playerStateChangeListener); 
     player.setPlaybackEventListener(playbackEventListener); 

     /** Start buffering **/ 
     if (!wasRestored) { 
      player.cueVideo(videoID); 
     } 
    } 

    @Override 
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) { 

    } 

    private YouTubePlayer.PlaybackEventListener playbackEventListener = new YouTubePlayer.PlaybackEventListener() { 

     @Override 
     public void onBuffering(boolean arg0) { 

     } 

     @Override 
     public void onPaused() { 

     } 

     @Override 
     public void onPlaying() { 

     } 

     @Override 
     public void onSeekTo(int arg0) { 

     } 

     @Override 
     public void onStopped() { 

     } 

    }; 

    private YouTubePlayer.PlayerStateChangeListener playerStateChangeListener = new YouTubePlayer.PlayerStateChangeListener() { 

     @Override 
     public void onAdStarted() { 

     } 

     @Override 
     public void onError(YouTubePlayer.ErrorReason arg0) { 

     } 

     @Override 
     public void onLoaded(String arg0) { 

     } 

     @Override 
     public void onLoading() { 

     } 

     @Override 
     public void onVideoEnded() { 

     } 

     @Override 
     public void onVideoStarted() { 

     } 
    }; 
}