Android调用Context.getResources()报空对象引用错误如何解决?
问题解决说明
错误根因
你代码里的空指针由两个错误逻辑共同导致:
- 普通业务类
Sms错误继承了AppCompatActivity,安卓中的Activity属于系统管理的组件,只能由系统框架完成初始化绑定上下文,开发者手动通过new关键字创建的Activity实例没有绑定有效Context,完全不可用 - 你调用
addSMS()方法时用到的getResources()依赖Activity上下文,手动实例化的Sms类没有这个上下文,调用时自然触发空指针
修复方案
你自己修改的方向完全正确,按以下两步调整即可:
- 移除
Sms类对AppCompatActivity的继承,改为普通Java类 - 给
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
相关产品推荐
相关产品推荐

