Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android从SharedPrefs获取一个集合正在破坏订单_Android_List_Set_Sharedpreferences - Fatal编程技术网

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