我有一个从设置菜单运行的方法来选择不同的语言。 我希望将其保存在SharedPreferences文件中,但我不断得到错误,没有任何解释。如果我单击“确定”,则应用程序会正常继续,但不会保存所选语言。
方法:
static String langSet = "";
static SharedPreferences languageSettings;
static SharedPreferences.Editor editLang;
public static void updateResources(Context context, String language) {
Locale locale = new Locale(language);
Locale.setDefault(locale);
Resources resources = context.getResources();
Configuration configuration = resources.getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
configuration.setLocale(locale);
} else {
configuration.locale = locale;
}
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
}
的onCreate:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//LocaleHelper.onCreate(this, "es");
languageSettings = getSharedPreferences("languages", Context.MODE_PRIVATE);
editLang = languageSettings.edit();
if (langSet != ""){
langSet = languageSettings.getString("lang", "");
updateResources(this, langSet);
}
startButton = (Button) findViewById(R.id.startButton);
startButton.setOnClickListener(new AdapterView.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), Main2Activity.class);
//intent.putExtra("name", friends.get(i));
startActivity(intent);
}
});
}
onCreateOptionsMenu:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.english) { // IMPORT THE MENU.XML FOLDER
languageSettings = getSharedPreferences("languages", Context.MODE_PRIVATE);
editLang.putString("lang", "en");
editLang.apply();
langSet = languageSettings.getString("lang", "");
updateResources(this, langSet);
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
//intent.putExtra("name", friends.get(i));
startActivity(intent);
}
else if (id == R.id.afrikaans) {
languageSettings = getSharedPreferences("languages", Context.MODE_PRIVATE);
editLang.putString("lang", "af");
editLang.apply();
langSet = languageSettings.getString("lang", "");
updateResources(this, langSet);
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
//intent.putExtra("name", friends.get(i));
startActivity(intent);
}
else if (id == R.id.spanish) {
languageSettings = getSharedPreferences("languages", Context.MODE_PRIVATE);
editLang.putString("lang", "es");
editLang.apply();
langSet = languageSettings.getString("lang", "");
updateResources(this, langSet);
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
//intent.putExtra("name", friends.get(i));
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
请协助。 感谢
答案 0 :(得分:2)
几年前,它发生在我身上。错误是我更改了sharedPreferenceType。
例如,如果您将editLang.putString("lang", "en");
更改为editLang.putInt("lang", 1);
并且只是安装该应用程序,那么它突然无效,因为您对不同类型的值使用了相同的密钥。
要解决我的问题,需要在安装之前从设备手动卸载整个应用程序。
所以,我的建议是尝试卸载应用程序或转到Android设备中的应用程序详细信息,然后清除您的应用数据,然后再进行此类更改。当然,在应用程序投入生产时要小心,如果要更改值的类型,我建议更改密钥的名称。