【问题标题】:Kotlin: null cannot be cast to non-null type com.google.android.youtube.player.YouTubePlayerFragmentKotlin:null 不能转换为非 null 类型 com.google.android.youtube.player.YouTubePlayerFragment
【发布时间】:2020-11-28 11:30:03
【问题描述】:

我正在我的 android 项目中实现 TouTube Api。我在 YouTubePlayerFragment 之前的“as”下面的行中出现错误,“这个演员永远不会成功”。我用来在我的片段中初始化 youtube 播放器。我已经在 gradle.properties 中尝试过 android.enableJetifier=true 但它没有帮助

val youTubePlayerFragment = fragmentManager?.findFragmentById(R.id.vidVieW) as YouTubePlayerFragment
    youTubePlayerFragment?.initialize(Config.getYoutubeApiKey(),monInitializedListener)

这里是 monInitializedListener 代码。当我在活动中使用它时效果很好

monInitializedListener = object: YouTubePlayer.OnInitializedListener {
                    override fun onInitializationSuccess(
                        provider: YouTubePlayer.Provider,
                        player: YouTubePlayer,
                        wasRestored: Boolean
                    ) {
    
    
                        if (!wasRestored) {
                            mPlayer = player
    
                        }
    
                        // player.setPlayerStyle(YouTubePlayer.PlayerStyle.MINIMAL)
                        val mydef="BPGJUPcbQ58"
                        mPlayer?.loadVideo(mydef)
    
                        Toast.makeText(activity?.baseContext, "Fragment Visible", Toast.LENGTH_SHORT).show()
                    }
    
                    override fun onInitializationFailure(
                        p0: YouTubePlayer.Provider?,
                        p1: YouTubeInitializationResult?
                    ) {
                        Toast.makeText(activity?.applicationContext, "onInitializationFailure()", Toast.LENGTH_LONG).show()
                    }
    
    //
                }

这是我的 XML 中的一个片段

<fragment
    
                android:name="com.google.android.youtube.player.YouTubePlayerFragment"
                android:id="@+id/vidVieW"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:background="@drawable/orientation"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
    
                />

在 logcat 中我收到此错误

kotlin.TypeCastException: null cannot be cast to non-null type com.google.android.youtube.player.YouTubePlayerFragment

【问题讨论】:

  • 能否添加您的 monInitializedListener 代码?
  • @Bhavnik 请立即查看

标签: android kotlin youtube youtube-api android-youtube-api


【解决方案1】:

默认情况下,Kotlin 不允许可空类型。这里的问题是片段管理器可以为空,因此如果它是整个表达式将为空,但您将其转换为不可为空的YoutubePlayerFragment。简单的解决方案是将转换 as YouTubePlayerFragment 更改为可空类型,而不是执行 as YouTubePlayerFragment? 我个人还建议您查看Kotlin Documentation on Null Safety

【讨论】:

  • 在使用 YouTubePlayerFragment 之后?我不再出错了,但问题是视频也没有播放
  • @account 这可能意味着 youtubePlayerFragment 为空。确保在初始化之前添加了vidVieW 片段
  • 先生,您能否详细说明您的答案,我没明白
  • 播放器片段尚未添加,这就是视频无法播放的原因。在调用 initialize 之前添加播放器片段
  • 这样? val details = FragTwoNew() details.setArguments(getIntent("BPGJUPcbQ58").extras) var fragmentManager = fragmentManager var fragmentTransaction = fragmentManager?.beginTransaction(); fragmentTransaction?.add(R.id.vidView,details); fragmentTransaction?.commit();
猜你喜欢
  • 2018-07-06
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多