我正在从存储的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;
}
答案 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的顺序检索按最旧到最新顺序检索密钥。