SharedPreferences无法使用onResume

时间:2016-01-09 12:40:58

标签: android sharedpreferences

Android中的共享首选项出现问题 - 我希望能够将一些字符串(保存图片的ID)作为下次发布的最爱 - 它工作得很完美,它会识别出ID是否已经在共享首选项并在必要时删除它,但是当我通过按下主页按钮停止应用程序(不杀死应用程序进程)然后返回到它时,它不再识别它。如果我终止进程并重新启动应用程序,它可以正常工作。

所以这是我的代码

MainActivity onCreate

    preferences = getSharedPreferences("favo", MODE_PRIVATE);
    edit = getSharedPreferences("favo", MODE_PRIVATE).edit();

MainActivity onResume

@Override
protected void onResume() {
    preferences = getSharedPreferences("favo", MODE_PRIVATE);
    edit = getSharedPreferences("favo", MODE_PRIVATE).edit();
    super.onResume();
}

我已经尝试在没有onResume的情况下这样做,但它没有改变结果。

更改共享首选项的方法

if (checkTheSharedPreferences(numberFavo)){
        v.setBackgroundResource(R.drawable.favo);
        edit.putString(pref, pref);
        edit.apply();
        showIt = "Zu Favoriten hinzugefügt";


    }else{
        v.setBackgroundResource(R.drawable.favo2);
        edit.remove(pref);
        edit.apply();
        showIt = "Aus Favoriten entfernt";

    }

如果我的方法检查SharedPreferences是否返回true,则意味着String不在SharedPrefs内并且可以添加,否则它将被删除,因为用户想要从他的收藏夹中删除它。

检查字符串是否在Prefs

内的方法
public Boolean checkTheSharedPreferences(int number) {
    SharedPreferences preferences = getSharedPreferences("favo", MODE_PRIVATE);
    Map<String, ?> map = preferences.getAll();

    for (Map.Entry<String, ?> entry : map.entrySet()) {
        if (entry.getValue().toString().equals(bilderIDs.get(number))) {
            return false;
        }
    }

    return true;
}

如上所述,它完美无缺,除非应用程序不可见/进入后台并再次打开而不重新启动。

提前致谢

修改

如果我在onResume被调用后等待大约30秒后似乎有效,但是如果它在UI线程上并且用户可能按下按钮来删除/添加,则不太可能等待30秒内的SharedPref

2 个答案:

答案 0 :(得分:4)

SharedPreferences.Editor.apply()是一个异步方法。它将值存储在其他thread.SharedPreferences.Editor.commit()中是一种同步方法。

if (checkTheSharedPreferences(numberFavo)){
    v.setBackgroundResource(R.drawable.favo);
    edit.putBoolean("myfav" + numberFavo, true);
    edit.commit();
    showIt = "Zu Favoriten hinzugefügt";
}else{
    v.setBackgroundResource(R.drawable.favo2);
    edit.remove("myfav" + numberFavo);
    edit.commit();
    showIt = "Aus Favoriten entfernt";
}
public Boolean checkTheSharedPreferences(int number) {
    SharedPreferences preferences = getSharedPreferences("favo", MODE_PRIVATE);
    return preferences.getBoolean("myfav" + number,false);
}
@Override
protected void onResume() {
    super.onResume();
    preferences = getSharedPreferences("favo", MODE_PRIVATE);
    edit = getSharedPreferences("favo", MODE_PRIVATE).edit();
}

答案 1 :(得分:2)

/******* Create SharedPreferences *******/

    SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE); 
    Editor editor = pref.edit();


/**************** Storing data as KEY/VALUE pair *******************/

    editor.putBoolean("key_name1", true);           // Saving boolean - true/false
    editor.putInt("key_name2", "int value");        // Saving integer
    editor.putFloat("key_name3", "float value");    // Saving float
    editor.putLong("key_name4", "long value");      // Saving long
    editor.putString("key_name5", "string value");  // Saving string

    // Save the changes in SharedPreferences
    editor.commit(); // commit changes


/**************** Get SharedPreferences data *******************/

// If value for key not exist then return second param value - In this case null

    pref.getBoolean("key_name1", null);         // getting boolean
    pref.getInt("key_name2", null);             // getting Integer
    pref.getFloat("key_name3", null);           // getting Float
    pref.getLong("key_name4", null);            // getting Long
    pref.getString("key_name5", null);          // getting String




/************ Deleting Key value from SharedPreferences *****************/

    editor.remove("key_name3"); // will delete key key_name3
    editor.remove("key_name4"); // will delete key key_name4

    // Save the changes in SharedPreferences
    editor.commit(); // commit changes

/************ Clear all data from SharedPreferences *****************/   

     editor.clear();
     editor.commit(); // commit changes