我需要在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/