Android 从设置保存SharedReferences

Android 从设置保存SharedReferences,android,android-studio,Android,Android Studio,我有一个从设置菜单运行的方法来选择不同的语言。 我希望将其保存在SharedReferences文件中,但我不断收到错误,没有任何解释。如果单击“确定”,应用程序将正常继续,但不会保存所选语言 方法: static String langSet = ""; static SharedPreferences languageSettings; static SharedPreferences.Editor editLang; public static void updateResou

我有一个从设置菜单运行的方法来选择不同的语言。 我希望将其保存在SharedReferences文件中,但我不断收到错误,没有任何解释。如果单击“确定”,应用程序将正常继续,但不会保存所选语言

方法:

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(“”)