app无法启动,boolean java.util.Locale.equals(java.lang.Object) on a null object reference。

1、先来看异常:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.Locale.equals(java.lang.Object)' on a null object reference
        at android.app.ActivityThread.updateLocaleListFromAppContext(ActivityThread.java:5518)
        at android.app.ActivityThread.handleConfigurationChanged(ActivityThread.java:5100)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2910)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1639)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:176)
        at android.app.ActivityThread.main(ActivityThread.java:6662)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

2、简要分析:

大概意思就是你设置了字体国际化的代码,但是启动时并没有获取到资源导致了空指针。

3、修改:

   3.1、  先找代码:

    @Override
    public Resources getResources() {
        Resources resources = super.getResources();
        Configuration configuration = resources.getConfiguration();
        configuration.setToDefaults();
        return resources;
    }

这是一段设置app不随着系统字体的调整而变化的代码,大概位置在重写的Application或者BaseActivity里(找不到的直接全局搜,Ctrl + Shift + R)

如果没搜到就不用往下看了!

​​​​​​​   3.2、找到了之后就替换为下面的代码

    @Override
    public Resources getResources() {
        Resources resources = super.getResources();
        Configuration configuration = resources.getConfiguration();
        DisplayMetrics displayMetrics = resources.getDisplayMetrics();

        if (null != resources && configuration.fontScale != 1) {
            configuration.fontScale = 1;
            if (Build.VERSION.SDK_INT >= 17) {
                Context configurationContext = createConfigurationContext(configuration);
                resources = configurationContext.getResources();
                displayMetrics.scaledDensity = displayMetrics.density * configuration.fontScale;
            } else {
                resources.updateConfiguration(configuration, displayMetrics);
            }
        }
        return resources;
    }

4、吐个小槽:

用原来的代码,测试时部分手机好用,部分手机无法启动,异常信息展示定位不够精准,多少被恶心了一小下。

共同学习! 共勉!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值