You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio Kotlin开发时VideoView为空报错如何解决

问题成因
  • 未调用setContentView()加载布局:你使用kotlin-android-extensions的合成控件属性(即kotlinx.android.synthetic导入的控件引用)的前提是Activity已经关联了布局文件,你在onCreate中没有绑定布局,所有控件引用都会为空。
  • Uri格式错误:资源路径的格式写错,android.resource后缺少冒号,路径前缀顺序错误,会导致无法正确定位视频资源。
  • kotlin-android-extensions已废弃:目前Android官方已经移除了对kotlin-android-extensions的支持,如果你使用的是较高版本的Android Gradle插件,合成控件属性默认失效,也会导致控件引用为空。
解决方案

方案1:快速修复原有代码

直接补全布局绑定逻辑、修正Uri格式即可,修改后代码如下:

package com.ai.sleepassistant

import android.net.Uri
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_intro.*

class Intro : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 新增:绑定布局文件
        setContentView(R.layout.activity_intro)
        // 修正Uri格式
        val offlineUri = Uri.parse("android.resource://$packageName/${R.raw.introa}")
        video_view?.apply {
            setVideoURI(offlineUri)
            setOnPreparedListener { start() }
        }
   }
}

说明:用?.apply替代非空判断写法更符合Kotlin规范,也能避免空安全报错

方案2:使用官方推荐的View Binding(推荐长期使用)

由于kotlin-android-extensions已经被废弃,建议切换为View Binding实现控件引用,步骤如下:

  1. 先在模块级的build.gradle中开启View Binding:
android {
    buildFeatures {
        viewBinding true
    }
}
  1. 修改Activity代码:
package com.ai.sleepassistant

import android.net.Uri
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.ai.sleepassistant.databinding.ActivityIntroBinding

class Intro : AppCompatActivity() {
    private lateinit var binding: ActivityIntroBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityIntroBinding.inflate(layoutInflater)
        setContentView(binding.root)
        
        val offlineUri = Uri.parse("android.resource://$packageName/${R.raw.introa}")
        binding.videoView.apply {
            setVideoURI(offlineUri)
            setOnPreparedListener { start() }
        }
   }
}

该方案完全规避了空安全问题,是官方推荐的写法

内容的提问来源于stack exchange,提问作者jjolatunji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:12:03