我没有运气让youtube-api在Android上工作。我正在尝试使最低限度的工作 - 只需通过公共访问播放视频(没有OAuth)。我有Google的钥匙,并且在模拟器上安装了YouTube应用程序。我非常有信心这是正确的,因为我从YouTube API示例代码中创建了一个新的项目,并且它可以很好地工作。
当我得到我的项目时,我得到了:
E/YouTubeAndroidPlayerAPI: Error creating YouTubePlayerView
com.google.android.youtube.player.internal.w$a: Exception thrown by invoked constructor in com.google.android.youtube.api.jar.client.RemoteEmbeddedPlayer
...
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
...
Caused by: java.lang.IllegalArgumentException: The concrete class implementing IObjectWrapper must have exactly *one* declared private field for the wrapped object. Preferably, this is an instance of the ObjectWrapper<T> class.
at zst.a(SourceFile:76)
我的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textAppearance="@android:style/TextAppearance.Small"
android:gravity="center"
android:text="Youtube!"/>
<fragment
android:name="com.google.android.youtube.player.YouTubePlayerFragment"
android:id="@+id/youtube_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
和我的活动:
public class EducationVideoActivity extends YouTubeFailureRecoveryActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_education_youtube);
YouTubePlayerFragment youTubePlayerFragment =
(YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.youtube_fragment);
youTubePlayerFragment.initialize(YoutubeKey.DEVELOPER_KEY, this);
}
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player,
boolean wasRestored) {
if (!wasRestored) {
player.cueVideo("nCgQDjiotG0");
}
}
@Override
protected YouTubePlayer.Provider getYouTubePlayerProvider() {
return (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.youtube_fragment);
}
}
我在网上尝试了其他几个示例,它们都会给出相同的错误。欢迎所有建议!
我在荣誉上遇到了一些问题。
第一次我以此方式导入youtubeandroidplayerapi.jar->右键单击project-> new-> new-> import .jar/.aar软件包中的应用程序夹 ->选择youtubeandroidplayerapi.jar.jar-jar-->完成。然后打开项目结构和依赖项选项卡添加了模块依赖关系。此Gradle完成后,在build.gradle中为compile project(':YouTubeAndroidPlayerApi')
。通过这种方式,发生了一个错误创建YouTubePlayerView。
因此,我恢复了所有内容,并像这样导入了lib->复制youtubeandroidplayerapi.jar中的/app/libs文件夹 ->打开项目结构,而不是模块依赖关系,我选择了JAR依赖关系,并从libs文件夹中选择youtubeandobeandroidplayerapi.jar。在那个Gradle完成后,现在在build.gradle中为compile files('libs/YouTubeAndroidPlayerApi.jar')
,一切都起作用。
正如麦克(Mike)在gradle中已经提到的那样,应为 compile files('libs/YouTubeAndroidPlayerApi.jar')
而不是 compile project(':YouTubeAndroidPlayerApi')
。
我希望这可以帮助您。
我认为我的gradle可能是不同步的。我还删除了这条线:
compile project(':YouTubeAndroidPlayerApi')
这仍然存在:
compile files('libs/YouTubeAndroidPlayerApi.jar')
我可以发誓我没有第一行尝试了一下,但是我不能绝对确定。