强制关闭应用程序时选择随机值的SharedPreferences

时间:2015-02-22 19:07:06

标签: android sharedpreferences

我必须实现一个功能,我必须在android中的应用程序中的SharedPreferences中存储多个id。我必须对首选项中的数据执行三项主要操作 1.添加并保存新的身份
2.删除特定的身份
3.检查id是否存在

我编写了以下类来执行所需的所有操作。

public class PreferenceUtils {

    Context context;
    private static final String TAG = PreferenceUtils.class.getName();

    private static final String FAVOURITES = "favourites";

    SharedPreferences preferences;
    SharedPreferences.Editor editor;

    public PreferenceUtils(Context context) {
        this.context = context;
        preferences = PreferenceManager.getDefaultSharedPreferences(context);
        editor = preferences.edit();

    }

    public void save(long id) {
        Set<String> prefStrings = preferences.getStringSet(FAVOURITES, new HashSet<String>());
        prefStrings.add(id+"");
        editor.putStringSet(FAVOURITES, prefStrings);
        editor.commit();
        editor.clear();
        Log.d(TAG,id + " saved");
    }

    public void delete(long id) {
        Set<String> prefStrings = preferences.getStringSet(FAVOURITES, new HashSet<String>());
        prefStrings.remove(id + "");
        editor.putStringSet(FAVOURITES, prefStrings);
        editor.commit();
        editor.clear();
        Log.d(TAG,id + " deleted");
    }

    public boolean isExists(long id) {
        final Set<String> prefStrings = preferences.getStringSet(FAVOURITES, new HashSet<String>());
        return prefStrings.contains(id+"");
    }

    public Set<String> getAll() {
        return preferences.getStringSet(FAVOURITES, new HashSet<String>());
    }

    public void clearHistory() {
        editor.clear();
        editor.commit();
    }

}

我正在从MainActivity创建PreferenceUtils类的实例,如下所示:

PreferenceUtils pref = new PreferenceUtils(getApplicationContext());

现在的问题是,当我在首选项中保存少量值并使用后退按钮或退出按钮关闭应用程序(将完成()MainActivity时)一切正常并且我从首选项中获取所有值。但是,如果我强制关闭应用程序并重新打开它,我只获得保存的第一个值,并且所有值都将丢失。

1 个答案:

答案 0 :(得分:0)

尝试删除save和delete中的editor.clear()。这可能是你的问题。