java - 通过共享首选项保存 Activity

标签 java android

我在保存 Activity 状态时遇到问题,我使用共享首选项来保存信息。当我单击按钮时,它将其保存到共享首选项中并完成 Activity :

sharedPreferences = this.getSharedPreferences("my_Pref", Context.MODE_PRIVATE);
    sharedPreferences.edit().putInt(AGE_SCORE, sbAge.getProgress()).apply();
    sharedPreferences.edit().putInt(STATUS_SCORE, spMyStatus.getSelectedItemPosition()).apply();
    if (rbFemaleMe.isChecked())
        sharedPreferences.edit().putInt(SEX_SCORE, 1).apply();
    else if(rbMaleMe.isChecked())
        sharedPreferences.edit().putInt(SEX_SCORE, 2).apply();
    sharedPreferences.edit().commit();
finish();

关闭 Activity 后,我第二次打开它,但没有任何反应,

我的 onCreate() 方法:

protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_search);
             if(sharedPreferences!= null)
            {
            sharedPreferences = getSharedPreferences("my_Pref", MODE_PRIVATE);

            sbAge.setProgress(sharedPreferences.getInt(AGE_SCORE, 0));
            spMyStatus.setSelection(sharedPreferences.getInt(STATUS_SCORE, 0));
            if(sharedPreferences.getInt(SEX_SCORE, 0) == 1)
                rbMaleMe.isChecked();
            else if (sharedPreferences.getInt(SEX_SCORE, 0) == 2)
                rbFemaleMe.isChecked();
        }

最佳答案

同时使用 apply()commit() 对我来说似乎多余,尝试进行所有编辑,然后使用 commit()与磁盘写入同步。

Difference in commit() and apply()

    sharedPreferences = this.getSharedPreferences("my_Pref", Context.MODE_PRIVATE);
        SharedPreferences.Editor edit = sharedPreferences.edit();
    edit.putInt(AGE_SCORE, sbAge.getProgress());
        edit.putInt(STATUS_SCORE, spMyStatus.getSelectedItemPosition());
        if (rbFemaleMe.isChecked())
            edit.putInt(SEX_SCORE, 1);
        else if(rbMaleMe.isChecked())
            edit.putInt(SEX_SCORE, 2);
        edit.commit();
    finish();

问题出在您检查sharedpreferences != null,但启动时它始终为null。首先使用 getApplicationContext().getSharedPreferences("my_Pref", MODE_PRIVATE); 初始化它。

protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_search);

            sharedPreferences = getApplicationContext.getSharedPreferences("my_Pref", MODE_PRIVATE);

             if(sharedPreferences != null)
            {

            sbAge.setProgress(sharedPreferences.getInt(AGE_SCORE, 0));
            spMyStatus.setSelection(sharedPreferences.getInt(STATUS_SCORE, 0));
            if(sharedPreferences.getInt(SEX_SCORE, 0) == 1)
                rbMaleMe.isChecked();
            else if (sharedPreferences.getInt(SEX_SCORE, 0) == 2)
                rbFemaleMe.isChecked();
        }

关于java - 通过共享首选项保存 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44456219/

相关文章:

java - HttpUrlConnection "PUT"请求还发送 "GET"请求

java - collectionGroup 文档中的数据未加载到 TextView Firestore 中

java - Android 应用程序通过不可靠的网络处理写入请求

java - 使用服务内的广播接收器检测调用结束

android - android加载布局时出现一些错误,但运行时没有效果

android - 在主要 Activity 上绘制 fragment

java - cucumber Selenium - Java - PageFactory : Step Definition: java. lang.NullPointerException

Java 替换文本文件中的行

java - OkHttp javax.net.ssl.SSLPeerUnverifiedException : Hostname domain. com 未验证

android - ORMLite 不处理 SQLiteExceptions?