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

Android调用Context.getResources()报空对象引用错误如何解决?

问题解决说明

错误根因

你代码里的空指针由两个错误逻辑共同导致:

  • 普通业务类Sms错误继承了AppCompatActivity,安卓中的Activity属于系统管理的组件,只能由系统框架完成初始化绑定上下文,开发者手动通过new关键字创建的Activity实例没有绑定有效Context,完全不可用
  • 你调用addSMS()方法时用到的getResources()依赖Activity上下文,手动实例化的Sms类没有这个上下文,调用时自然触发空指针

修复方案

你自己修改的方向完全正确,按以下两步调整即可:

  1. 移除Sms类对AppCompatActivity的继承,改为普通Java类
  2. 给addSMS方法新增Context参数,调用时从Fragment传入已经获取到的有效上下文即可

修改后的完整Sms类代码

public class Sms{
    private String contact;
    private String contenu;
    private int type;
    private int read;
    private String date;

    public void addSMS(Context myContext) {
        List<Sms> mesSms= new ArrayList<>();
        InputStream is = myContext.getResources().openRawResource(R.raw.sms1);
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(is, Charset.forName("UTF-8"))
        );
        // 原有后续逻辑保留即可
    }
}

Fragment调用处修改

private void createOnClicBtnEnreg(){
    Sms mesSms = new Sms();
    // 传入Fragment当前有效上下文
    mesSms.addSMS(getContext());
}

修改完成后再运行即可解决该空指针异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:36:01