SharedPreference StringSet到数组顺序问题

时间:2016-04-08 18:49:44

标签: android arrays set android-sharedpreferences

在解释我的问题时请耐心等待:

1)我通过StringSet存储我的首选项,如下所示:

      SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();

            // Create a new Arraylist with the details of our details
            ArrayList <String> newCityFareDetails = new ArrayList<String>();

            // Store various values
            newCityFareDetails.add(0, String.valueOf(cloneFare.value1()));
            newCityFareDetails.add(1, String.valueOf(cloneFare.value2()));
            newCityFareDetails.add(2, String.valueOf(cloneFare.value3()));
            newCityFareDetails.add(3, String.valueOf(cloneFare.value4()));
            newCityFareDetails.add(4, cloneFare.value5());

            // Only value 5 is a string, rest are all floats


            // Convert to a hashstring, give it the name of our value
            Set<String> set = new HashSet<String>();
            set.addAll(newCityFareDetails);
            editor.putStringSet(extras.getString("startCity"), set);

            // And write it to storage
            editor.commit();

现在,我试图按如下方式阅读:

SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, Context.MODE_PRIVATE);

Set<String> tryCityFromPrefs = prefs.getStringSet(currentCity, null);

 if (tryCityFromPrefs!=null){


                        // Crude code, but we convert the preferences into a String array
                        String[] values = tryCityFromPrefs.toArray(new String[tryCityFromPrefs.size()]);

                        myFare = new Fare(Float.parseFloat(values[0]), Float.parseFloat(values[1]),
                                Float.parseFloat(values[2]), Float.parseFloat(values[3]), values[4]);

                    }

现在,问题是myFare没有正确初始化,因为数组中的值是乱码的。即,我们保存时位于最后位置的字符串值现在位于第2位。这与Sets to String转换有关吗?或者我错过了一些明显的东西?

1 个答案:

答案 0 :(得分:1)

Set不保证订单。虽然订购了特定的Set实施(例如,LinkedHashSet),但这不是SharedPreferences使用的。

您的选择是:

  1. 将您的应用更改为不关心订单。

  2. 以其他方式将数据保存为SharedPreferences。例如,在this app中,我使用JsonReader / JsonWriterArrayList保存到单个String值中。

  3. 以其他方式保存数据(例如,JSON文件,带有序列号的SQLite数据库以维护顺序)。