Android 从设置保存SharedReferences
我有一个从设置菜单运行的方法来选择不同的语言。 我希望将其保存在SharedReferences文件中,但我不断收到错误,没有任何解释。如果单击“确定”,应用程序将正常继续,但不会保存所选语言 方法:Android 从设置保存SharedReferences,android,android-studio,Android,Android Studio,我有一个从设置菜单运行的方法来选择不同的语言。 我希望将其保存在SharedReferences文件中,但我不断收到错误,没有任何解释。如果单击“确定”,应用程序将正常继续,但不会保存所选语言 方法: static String langSet = ""; static SharedPreferences languageSettings; static SharedPreferences.Editor editLang; public static void updateResou
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());
}
一旦创建:
@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);
}
});
}
OnCreateOptions菜单:
@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);
}
请帮忙。
谢谢几年前这件事发生在我身上。错误在于我更改了SharedReferenceType 例如,如果您更改
editLang.putString(“lang”、“en”)代码>到editLang.putInt(“lang”,1)
然后安装应用程序,突然它就不起作用了,因为您对不同类型的值使用了相同的键
为了解决我的问题,需要在安装之前从设备手动卸载整个应用程序
因此,我的建议是尝试卸载该应用程序,或者在进行此类更改之前转到android设备中的应用程序详细信息并清除应用程序数据。当然,在应用程序处于生产状态时要小心,如果您想更改值的类型,我建议您更改密钥的名称。不需要完全卸载。进入设置->应用程序,然后清除应用程序数据就足够了。发布错误日志。顺便说一下,不要将字符串与==或==进行比较!运算符。使用.equals()方法:if(langSet!=“”)应为if(!langSet.equals(“”)