Android从SharedPrefs获取一个集合正在破坏订单
我有这样一种方法:Android从SharedPrefs获取一个集合正在破坏订单,android,list,set,sharedpreferences,Android,List,Set,Sharedpreferences,我有这样一种方法: public static void setSearchHistory(Activity activity, int channelId) { SharedPreferences sp = getSharedPreferences(activity); SharedPreferences.Editor prefsEditor = sp.edit(); Set<String> searchHistory = sp.getStringSet(
public static void setSearchHistory(Activity activity, int channelId) {
SharedPreferences sp = getSharedPreferences(activity);
SharedPreferences.Editor prefsEditor = sp.edit();
Set<String> searchHistory = sp.getStringSet("searchHistory", new LinkedHashSet<String>());
List<String> shList = new ArrayList<>();
shList.addAll(searchHistory);
if(shList.size() > 0) {
boolean wasAdded = false;
for(int i=0;i<shList.size();i++) {
Integer channelID = Integer.parseInt(shList.get(i));
if(channelId == channelID) {
shList.remove(i);
shList.add(0, String.valueOf(channelId));
wasAdded = true;
break;
}
}
if(!wasAdded) {
shList.add(0, String.valueOf(channelId));
}
} else {
shList.add(String.valueOf(channelId));
}
if(shList.size() > 10) {
for(int i=10;i<shList.size();i++) {
shList.remove(i);
}
}
searchHistory = new LinkedHashSet<>(shList);
prefsEditor.putStringSet("searchHistory", searchHistory);
prefsEditor.apply();
}
保存到SharedReferences
后的设置:
这真的很烦人,我不想把订单弄乱(
任何帮助都将不胜感激。谢谢。我从另一个问题中找到了解决方法:
我完全删除了Set
对象,并将它们替换为JSONArray
保存到SharedPrefs中,只需String
,如下所示
将列表
放入SharedPrefs:
public static void setSearchHistory(Activity activity, int channelId) {
try {
SharedPreferences sp = getSharedPreferences(activity);
SharedPreferences.Editor prefsEditor = sp.edit();
JSONArray searchHistory;
List<String> shList = new ArrayList<>();
if(sp.getString("searchHistory", null) != null) {
searchHistory = new JSONArray(sp.getString("searchHistory", null));
for(int i=0;i<searchHistory.length();i++) {
shList.add(searchHistory.get(i).toString());
}
}
if(shList.size() > 0) {
boolean wasAdded = false;
for(int i=0;i<shList.size();i++) {
Integer channelID = Integer.parseInt(shList.get(i));
if(channelId == channelID) {
shList.remove(i);
shList.add(0, String.valueOf(channelId));
wasAdded = true;
break;
}
}
if(!wasAdded) {
shList.add(0, String.valueOf(channelId));
}
} else {
shList.add(String.valueOf(channelId));
}
if(shList.size() > 10) {
for(int i=10;i<shList.size();i++) {
shList.remove(i);
}
}
searchHistory = new JSONArray(shList);
prefsEditor.putString("searchHistory", searchHistory.toString());
prefsEditor.apply();
} catch (JSONException e) {
e.printStackTrace();
}
}
public static List<Channel> getSearchHistory(Activity activity) {
try {
SharedPreferences sp = getSharedPreferences(activity);
List<String> shList = new ArrayList<>();
if(sp.getString("searchHistory", null) != null) {
JSONArray searchHistory = new JSONArray(sp.getString("searchHistory", null));
for(int i=0;i<searchHistory.length();i++) {
shList.add(searchHistory.get(i).toString());
}
}
List<Channel> channelList = new ArrayList<>();
for(int i=0;i<shList.size();i++) {
Channel channel = Channel.findChannelByID(Integer.parseInt(shList.get(i)), activity);
channelList.add(channel);
}
return channelList;
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}
工作起来很有魅力。耶!我从另一个问题中找到了解决办法:
我完全删除了Set
对象,并将它们替换为JSONArray
保存到SharedPrefs中,只需String
,如下所示
将列表
放入SharedPrefs:
public static void setSearchHistory(Activity activity, int channelId) {
try {
SharedPreferences sp = getSharedPreferences(activity);
SharedPreferences.Editor prefsEditor = sp.edit();
JSONArray searchHistory;
List<String> shList = new ArrayList<>();
if(sp.getString("searchHistory", null) != null) {
searchHistory = new JSONArray(sp.getString("searchHistory", null));
for(int i=0;i<searchHistory.length();i++) {
shList.add(searchHistory.get(i).toString());
}
}
if(shList.size() > 0) {
boolean wasAdded = false;
for(int i=0;i<shList.size();i++) {
Integer channelID = Integer.parseInt(shList.get(i));
if(channelId == channelID) {
shList.remove(i);
shList.add(0, String.valueOf(channelId));
wasAdded = true;
break;
}
}
if(!wasAdded) {
shList.add(0, String.valueOf(channelId));
}
} else {
shList.add(String.valueOf(channelId));
}
if(shList.size() > 10) {
for(int i=10;i<shList.size();i++) {
shList.remove(i);
}
}
searchHistory = new JSONArray(shList);
prefsEditor.putString("searchHistory", searchHistory.toString());
prefsEditor.apply();
} catch (JSONException e) {
e.printStackTrace();
}
}
public static List<Channel> getSearchHistory(Activity activity) {
try {
SharedPreferences sp = getSharedPreferences(activity);
List<String> shList = new ArrayList<>();
if(sp.getString("searchHistory", null) != null) {
JSONArray searchHistory = new JSONArray(sp.getString("searchHistory", null));
for(int i=0;i<searchHistory.length();i++) {
shList.add(searchHistory.get(i).toString());
}
}
List<Channel> channelList = new ArrayList<>();
for(int i=0;i<shList.size();i++) {
Channel channel = Channel.findChannelByID(Integer.parseInt(shList.get(i)), activity);
channelList.add(channel);
}
return channelList;
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}
工作起来像个符咒。耶!你知道Set
不能保证订单吗?这就是为什么我使用LinkedHashSet
你知道Set
不能保证订单吗?这就是为什么我使用LinkedHashSet