Android Studio: сохраните и загрузите ArrayList с помощью SharedPreferences - PullRequest
0 голосов
/ 08 ноября 2018

Точно так же, как вопрос. У меня возникли проблемы с сохранением и загрузкой в ​​общие настройки в приложении, которое я создаю, поскольку я использую ArrayLists и фрагменты.

Я опубликовал ответ ниже в надежде, что он поможет любому из вас, кто, возможно, был так же запутан, как и я.

1 Ответ

0 голосов
/ 08 ноября 2018

Вот быстрый шаблон для сохранения списка в sharedpreferences в любом приложении, которое вы делаете (это, как и loadList, находятся за пределами вашего метода OnCreate:

private void saveList(ArrayList<YourObject> yourList, String yourKey) {

    SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(this.getApplicationContext());

    SharedPreferences.Editor prefsEditor = prefs.edit();

    Gson gson = new Gson();
    String json = gson.toJson(yourList);

    prefsEditor.putString(yourKey, json);

    prefsEditor.apply();
}

Там, где написано ...(this.getApplicationContext());, для фрагментов вы бы использовали ...(getActivity());

Кроме того, обязательно используйте .apply();, а не .commit(); в конце, так как применяются прогоны в фоновом режиме. Этот метод сохранения также работает с любым объектом, а не только со списками. Все, что вам нужно сделать, это вместо ...saveList(ArrayList<YourObjectItems> yourList,..., просто введите другой объект, такой как ...saveList(String yourString,...

- - - - - - - - - - - - - - - - - * 1 042 * - - * +1044 * - - * тысяча сорок-шесть * - - - * +1049 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * тысяча девяносто четыре * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Вот шаблон для метода loadList:

private ArrayList<YourObject> loadList(String yourKey) {

    SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(this.getApplicationContext());

    Gson gson = new Gson();
    String json = prefs.getString(yourKey, null);

    Type type = new TypeToken<ArrayList<YourObject>>() {}.getType();

    return gson.fromJson(json, type);
}

Если вы хотите загрузить что-то кроме списка, скажем, строковое значение, со второй до последней строки вы должны поставить: Type type = new TypeToken<String>() {}.getType();

ВАЖНО !!! Чтобы использовать Gson(), необходимо поставить

implementation 'com.google.code.gson:gson:2.8.2'

в разделе "зависимости" в скриптах Gradle -> build.gradle (Module: app).

Я считаю, что это должно охватывать все. Прокомментируйте любые изменения, которые я должен сделать. Надеюсь, это поможет некоторым людям. Кроме того, к вашему сведению, я использую это в приложении, которое создаю на основе сборки API 24 с Android 7.0. Я не знаю, работает ли это для более старых версий, но новые версии должны справиться с этим.

...