Android调用getResources()空对象引用问题求助(附视频播放器代码)
SurfaceView+MediaPlayer视频播放器初始化崩溃修复
报错信息
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.project.textureviewvideotest/com.project.textureviewvideotest.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
核心问题
崩溃根源是类成员变量mediaController在Activity未完成初始化时就执行了初始化:
// 错误代码:类级别成员变量提前初始化 MediaController mediaController = new MediaController(this){};
类成员变量会在Activity构造阶段被初始化,此时this(Context实例)还未完全创建,MediaController构造函数内部尝试访问Context的Resources时触发空指针。
修复步骤
删除冗余的
mediaController变量
代码中已经定义了mcontroller变量并在surfaceCreated中完成初始化,mediaController属于未被使用的冗余变量,直接删除这段代码即可:// 移除这整段冗余代码 // MediaController mediaController = new MediaController(this){};额外修复两个次要问题
- 布局中不存在
container控件,删除无效的findViewById调用:// 删除此行,布局无对应ID // container = findViewById(R.id.container); - 修正视频URI的拼接错误(多了一个斜杠):
video_uri = Uri.parse("android.resource://" + getPackageName() + "/raw/testvideo");
- 布局中不存在
修复后逻辑说明
MediaController的初始化放在surfaceCreated方法内,此时Activity Context已经完全可用,不会触发空指针;移除未使用的冗余变量,避免无效代码导致的潜在问题。
内容的提问来源于stack exchange,提问作者applicationStarter
相关产品推荐
相关产品推荐

