Android Studio中自定义MyApplication单例调用空指针异常如何解决?
问题排查与解决方法
核心触发原因
你遇到的空指针90%以上是因为MyApplication里的生命周期方法名拼写错误:
你写的是
public void OnCreate(),首字母O大写,而Android Application类的系统回调生命周期方法是小写o开头的onCreate(),系统识别不到你自定义的大写开头的方法,所以不会执行方法内的初始化逻辑,myLocations始终为null,调用getMyLocations()自然返回空值。
修复步骤
- 第一步:修正
OnCreate方法的方法名,加上@Override注解避免后续再出现拼写错误:
@Override public void onCreate() { super.onCreate(); singleton = this; myLocations = new ArrayList<>(); }
- 第二步:检查
AndroidManifest.xml的<application>标签,是否配置了android:name属性指向你的自定义Application类,如果没加要补上,否则系统不会加载你写的MyApplication:
<application android:name=".MyApplication" <!-- 其他原有配置比如icon、label、theme等保持不变 --> > <!-- 四大组件配置保持不变 --> </application>
- 第三步(非必选优化项):把
getInstance方法改成静态的,后续可以直接静态调用获取实例,不需要每次强转上下文,避免强转出错:
public static MyApplication getInstance(){ return singleton; }
优化后可以直接调用MyApplication.getInstance().getMyLocations(),调用逻辑更安全。
其他可能的排查点
如果做完上面两步还是有空指针,可以按下面顺序排查:
- 检查调用
getMyLocations()的时机是否过早,比如在Activity的attachBaseContext阶段就调用,这时候Application的onCreate还没执行完,未完成初始化 - 检查混淆配置是否把自定义Application类的方法混淆掉了,可在混淆规则里加上
-keep class 你的MyApplication全类名 {*;}规避问题
内容的提问来源于stack exchange,提问作者CanonSAS
相关产品推荐
相关产品推荐

