从SharedPreferences中删除条目 - Android

时间:2013-08-12 13:16:57

标签: android sharedpreferences

我正在从存储的SharedPreferences创建一个数组。下面的代码采用最近的五个并创建一个数组(所以我可以使用它)。问题是我的editor.remove语句不会删除共享条目,而只是将其设置为null。我无法创建最近的5个条目。如果列表大于5,如何删除第一个条目并在结尾添加新条目? (这有点像最近保存的搜索列表)。

我知道另一种方法是使用JSON。你能指出一个例子吗?感谢。

public boolean savedIPsArray(String oneTimeData, String key, Context mContext) {   
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0); 

    int size = prefs.getInt(key+"_size", 0);

    SharedPreferences.Editor editor = prefs.edit(); 

    if(size < 5){
        editor.putString(key+ "_" + size, oneTimeData);   
        editor.putInt(key+"_size", ++size); 
    }
    else{
        editor.remove(key+ "_" + 0).commit();
        editor.putString(key+ "_" + (size-1), oneTimeData);
        editor.putInt(key+"_size", size);
    }

    return editor.commit();
}

public String[] loadedIPsArray(String key, Context mContext) {  
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);  
    int size = prefs.getInt(key+ "_size", 0);  
    array = new String[size];  
    for(int i=0;i<size;i++)  {
        array[i] = prefs.getString(key+ "_" + i, null);  
    }
    return array;  
}

2 个答案:

答案 0 :(得分:2)

您似乎需要将其中一些int转换为String

if(size < 5){
    editor.putString(key+ "_" + String.valueOf(size), oneTimeData);   
    editor.putInt(key+"_size", ++size); 
}
else{
    editor.remove(key+ "_" + String.valueOf(0)).commit();
    editor.putString(key+ "_" + String.valueOf(size-1), oneTimeData);
    editor.putInt(key+"_size", size);
}

答案 1 :(得分:0)

跟踪上次添加的索引以及总大小,然后在达到最大大小后循环,覆盖先前的密钥而不是删除它们。由于您知道总大小和最后添加的条目,因此您可以按照从last_added + 1到size,然后从0到last_added的顺序检索按最旧到最新顺序检索密钥。