重新启动应用更改SharedPreferences?

时间:2018-06-09 19:59:52

标签: android sharedpreferences

好吧,我有一个我必须保存的数字列表,我将那些包含换行符(" \ n)分开,然后将它们放入一个字符串中以保存:

        List<String> usedTabs = new ArrayList<>();
        ...
        StringBuilder save = new StringBuilder();
        if(usedTabs.size()==0) {
            save = new StringBuilder("0");
        } else {
            for(String s: usedTabs) {
                save.append(s);
                save.append("\n");
            }
        }

        SharedPreferences sharedPreferences  = PreferenceManager.getDefaultSharedPreferences(getContext());
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString("saveUsedTabs", save.toString());
        editor.commit();

很好,这很有效!当我再次需要它时我又回到我的列表中我这样做:

    String save = PreferenceManager.getDefaultSharedPreferences(getContext()).getString("saveUsedTabs", "0");
    String tabs[] = save.split("\n");
    usedTabs.addAll(Arrays.asList(tabs));

也适用。但是如果我在保存之后重新启动应用程序,那么当我在最后一次之后再次加载它时,会有一些4个空格:"6\n3\n5\n3\n3\n "

这怎么会发生?我已经更改了密钥,以确保我的偏好不被其他任何东西使用。

2 个答案:

答案 0 :(得分:0)

使用此代码将您的字符串数据存储在共享首选项中。 如果您正在参加活动,那么

FirebaseDatabase.getInstance().getReference("poi").orderByChild("name").equalTo("anyName")) {

如果你在其他班级,那么只需在开头添加上下文。

希望这会对你有所帮助。

答案 1 :(得分:0)

List<String> usedTabs = new ArrayList<>();
    ...
    StringBuilder save = new StringBuilder();
    if(usedTabs.size()==0) {
        save = new StringBuilder("0");
    } else {
        for(String s: usedTabs) {
            save.append(s);
            save.append("\n");
        }
    }

    SharedPreferences sharedPreferences  = PreferenceManager.getDefaultSharedPreferences(getContext());
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString("saveUsedTabs", save.toString().replaceAll(" ",""));
    editor.commit();

尝试上述操作,只需在存储值时删除空格。