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

播放Android下载内容报NullPointerException,在线流播放正常如何解决

问题原因
  • 核心触发原因:报错日志明确说明Content实例为空时调用了getReference()方法导致空指针异常。你当前仅判断了Intent.extras不为空,没有校验从extras中取出的content是否为空,直接调用方法就会触发崩溃。
  • 为什么在线播放正常、下载播放异常:播放在线流的跳转逻辑中,你正确将Content序列化对象传入了Intent的参数中;而播放下载内容的跳转入口没有传该参数,导致从extras中取出的content为null。小概率可能是下载场景下传递的Content对象序列化失败,但该情况可能性极低,因为在线播放场景序列化逻辑是正常的。
修复方案

1. 优先添加空校验兜底(必做)

在拿到content对象后立刻做非空校验,避免后续逻辑直接崩溃,示例代码:

Bundle extras = getIntent().getExtras();
if(extras != null){
    content = (Content) extras.getSerializable(Content.LOCAL_CONTENT_OBJECT);
    IS_STREAM = extras.getBoolean(Content.LOCAL_IS_STREAM);
}
// 新增非空校验逻辑
if (content == null) {
    Toast.makeText(this, "播放内容异常,请重试", Toast.LENGTH_SHORT).show();
    finish(); // 关闭页面,不执行后续逻辑
    return;
}
// 原有后续逻辑
plvm = new ViewModelProvider(this).get(PlaybackViewModel.class);
...

2. 排查下载内容的跳转入口(必做)

找到你点击下载内容跳转PlayerActivity的代码,确认是否添加了传参逻辑,确保和在线播放的跳转逻辑一致,示例:

// 下载内容跳转PlayerActivity时必须传这两个参数
Intent intent = new Intent(CurrentActivity.this, PlayerActivity.class);
intent.putExtra(Content.LOCAL_CONTENT_OBJECT, 你本地存储的下载对应的Content实例);
intent.putExtra(Content.LOCAL_IS_STREAM, false);
startActivity(intent);

3. 可选优化

如果下载内容的Content实例已经存储在本地数据库中,也可以改为传递reference字符串或者内容ID,到PlayerActivity后从本地查询实例,比传递序列化对象更稳定,避免序列化过程中出现的意外问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 11:24:10