我需要在onCreate之前运行的updateBaseContextLocale上访问SharedPreferences。当我从updateBaseContextLocale调用SharedPreferences时,出现此错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference


如果我从onCreate调用getSharedPreferences,则更改语言环境为时已晚。这是我需要运行的代码:

    private Context updateBaseContextLocale(Context context) {
        SharedPreferences prefs = getSharedPreferences("Settings", MODE_PRIVATE);
        String language = prefs.getString("Language", "en");
        Locale locale = new Locale(language);
        Locale.setDefault(locale);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            return updateResourcesLocale(context, locale);
        }
        return updateResourcesLocaleLegacy(context, locale);
    }

最佳答案

不仅仅是:
SharedPreferences prefs = getSharedPreferences("Settings", MODE_PRIVATE);

使用方法参数中接收的上下文来获取SharedPrefs:

SharedPreferences prefs = context.getSharedPreferences("Settings", MODE_PRIVATE);

关于java - 如何从updateBaseContextLocale调用getSharedPreferences,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59441930/

10-12 01:51