Общие настройки для хранения массива в Android

У меня есть 3 объекта ArrayList, я хочу сохранить их в приложении для Android и получить их, когда приложение запущено.

Кроме того, мне нужен тот же порядок элементов, что и в ArrayList Должен ли я идти с SharedPreferences или какой-либо другой подход для его достижения.

Когда я пытаюсь использовать SharedPreferences, он использует HashSet, и в этом порядок ArrayList отличается во время его извлечения.

Подскажите, как мне этого добиться, не нарушая порядка?


person Vishal Varshney    schedule 30.12.2015    source источник
comment
Возможный дубликат Сохранить ArrayList в SharedPreferences   -  person apmartin1991    schedule 30.12.2015
comment
как его сохранить, можете ли вы сказать мне пример кода для этого   -  person Vishal Varshney    schedule 30.12.2015
comment
щелкните ссылку в комментарии выше, в нем есть весь необходимый код, если вы не можете понять код, скажите мне, с чем вы боретесь, и я сделаю все возможное, чтобы помочь вам.   -  person apmartin1991    schedule 30.12.2015
comment
Вместо ответа на вопрос я бы начал с того, что хранить ArrayList в SharedPreferences — плохая идея, и вам следует избегать этого, используя другие методы, такие как база данных и т. д.   -  person Damian Kozlak    schedule 30.12.2015
comment
Согласен с @DamianKozlak. Вместо этого попробуйте базу данных или Realm (realm.io).   -  person RockerFlower    schedule 30.12.2015


Ответы (2)


Вы можете преобразовать массив в строку, используя приведенный ниже код.

ArrayList<String> arr = new ArrayList<>();
    arr.add("cat");
    arr.add("dog");
    arr.add("bird");

    // Convert the ArrayList into a String.
    String res = String.join(",", arr);

теперь сохраните res в настройках

при извлечении разделите его с помощью "," и получите тот же порядок. Неэффективно, но решит проблему.

person Geo Paul    schedule 30.12.2015

Если вы уже используете gson в своем проекте, вы можете преобразовать этот список строк в объект json и поместить его в sharedpreference как обычную строку, а когда вы извлечете эту строку из предпочтения, преобразуйте ее обратно в ArrayList. Мне это кажется очень легким.

private List<String> searchHistoryList;
 Type listType = new TypeToken<ArrayList<String>>() { // object can be String here
            }.getType();
String previousHistory = sp.getString("KEY");
            searchHistoryList = new Gson().fromJson(previousHistory, listType);

Я успешно использовал это в одном из своих проектов, и, похоже, он работает нормально, даже если есть объект. ОБЯЗАТЕЛЬНО добавьте любую нулевую проверку, если это необходимо.

person silentsudo    schedule 30.12.2015