【问题标题】:Error creating YouTubePlayerView创建 YouTubePlayerView 时出错
【发布时间】: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


【解决方案1】:

我的 Honor 8 出现了一些问题。

我第一次以这种方式导入 YouTubeAndroidPlayerApi.jar -> 右键单击​​项目中的应用文件夹 -> 新建 -> 模块 -> 导入 .JAR/.AAR 包 -> 选择 YouTubeAndroidPlayerApi.jar -> 完成。然后打开项目结构并在 Dependencies 选项卡中添加 Module 依赖项。在这个 gradle 完成并且在 build.gradle 之后是compile project(':YouTubeAndroidPlayerApi')。这样就发生了创建 YouTubePlayerView 的错误。

所以我恢复了所有内容并像这样导入 lib -> 将 YouTubeAndroidPlayerApi.jar 复制到 /app/libs 文件夹中 -> 打开项目结构,而不是模块依赖项,我选择了 Jar 依赖项,并从 libs 文件夹中选择了 YouTubeAndroidPlayerApi.jar。在该 gradle 完成之后,现在 build.gradle 是 compile files('libs/YouTubeAndroidPlayerApi.jar') 并且一切正常。

正如 gradle 中已经提到的 mike 应该是 compile files('libs/YouTubeAndroidPlayerApi.jar') 而不是 compile project(':YouTubeAndroidPlayerApi')

希望对你有帮助。

【讨论】:

    【解决方案2】:

    我想我的 gradle 可能不同步。我也删除了这一行:

    compile project(':YouTubeAndroidPlayerApi')
    

    但它仍然存在:

    compile files('libs/YouTubeAndroidPlayerApi.jar')
    

    我可以发誓我在没有第一行的情况下尝试过,但我不能绝对肯定地说。

    【讨论】:

      猜你喜欢
      • 2016-09-07
      • 1970-01-01
      • 2013-11-09
      • 2013-11-29
      • 2012-03-30
      • 1970-01-01
      • 2012-12-16
      • 2012-07-07
      • 2014-07-24
      相关资源
      最近更新 更多