【发布时间】:2017-07-16 00:17:48
【问题描述】:
我没有运气让 youtube-api 在 android 上运行。我正在尝试获得最低限度的工作 - 只需通过公共访问(无 oauth)播放视频。我有一个来自谷歌的密钥,我在我的模拟器上安装了 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);
}
}
我在网上尝试了其他几个示例,它们都给出了相同的错误。欢迎提出任何建议!
【问题讨论】:
-
我确实看到示例代码没有使用任何 compat* 库,而我的应用程序使用了。有人听说过 youtube-api 和 compat* 是否存在错误吗?
-
好吧,经过一周的挫折,我的问题已经消失了。我开始删除所有兼容*,认为这是一个糟糕的想法,撤消了我的更改,一切都很好。
标签: java android android-studio android-fragments youtube-api