1

我正在从存储的 SharedPreferences 创建一个数组。下面的代码采用最近的五个并创建一个数组(所以我可以使用它)。问题是我的editor.remove声明没有删除 Shared 条目,而只是将其设置为 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;  
}
4

2 回答 2

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);
}
于 2013-08-12T13:26:03.237 回答
0

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

于 2013-08-12T13:57:20.220 回答