android,无法删除SharedPreferences

时间:2014-07-15 19:12:30

标签: android sharedpreferences

我有一个动态ui,用户可以在其中添加和删除元素。比onPause我在SharedPreferences上保存ui的当前状态(字符串,整数等),以便稍后在onResume()调用中重新创建ui。

protected void onResume(){

    SharedPreferences prefs = getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    Map<String, String> savedTimers = (Map<String, String>) prefs.getAll();


    if(savedTimers.size() > 0){
        for(int i=0; i<savedTimers.size(); i++){
            // retrieve the info saved on the prefs
            // and do stuff with those (reload a dynamic gui basically)
            ...
            //remove the timer from the prefs
            editor.remove(String.valueOf(i));

        }
        editor.commit();
    }
}

但是,即使用户从ui中删除了一些元素,在对onResume的后续调用中也会忽略这一点。

所以我想说我有3个TextView。然后我关闭应用程序并再次打开它。正如所料,我有3个TextViews。

但如果我删除一个(或两个或全部)然后关闭并启动应用程序,那么我仍然有三个TextView。 lgos确认我是onResume的问题。

我的代码逻辑中是否有错误?

编辑:根据请求,这是保存的逻辑:

protected void onPause(){

    SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();

    for (int i=0; i<container.getChildCount()-1; i++){
        // bla bla bla other code
        editor.putString(String.valueOf(i), "bla bla bla");
    }   
    editor.commit();
}

P.S。 现在我很好奇关于@ksarmalkar的ID的评论

2 个答案:

答案 0 :(得分:0)

您是否可以将首选项用作整数,其中值表示文本视图的数量?

在您的onresume中,只需询问偏好中的数字。

在这种情况下,您无需删除,询问长度或需要全部检索它们。

如果在onresume和主类中声明Prefs,也可能会发生冲突。我根本不会在onresume中声明它。

答案 1 :(得分:0)

找到了问题所在。

在屏幕旋转的情况下,我也保存了prefs。所以在轮换之后,我从传递给onRestoreInnstanceState()的包中重新创建了gui,而相同的信息存储在共享的首选项中。

在onPause()alloes上添加isFinishing()的测试基本上跳过onPause()中的代码,因此没有存储prefs,