Создайте список из строки, извлеченной из другого списка, с помощью Kotlin - PullRequest
1 голос
/ 27 мая 2020

В моем приложении я использую этот класс в качестве модели:

class ExpenseItem (val concept: String, val amount: String, val months: List<String>, val type: Type, val cards_image: Int, val payDay: Int, val notes: String) {

    enum class Type {RECURRENT, VARIABLE}
}

И с этой моделью я создаю изменяемый список

var generalExpensesList: MutableList<ExpenseItem> = mutableListOf()

и добавляю элементы

 val currentExpense = ExpenseItem(
                    concept,
                    amount,
                    listOfMonths,
                    enumtype,
                    card_image_number,
                    payday.toInt(),
                    notes
                )

                generalExpensesList.add(currentExpense)

Как видите, одно из полей модели также является списком типа String, на случай, если это было важно

Ну, я намерен преобразовать этот список в String, сохраните его как sharedpreference, а затем создайте новый список, используя эту String, полученную из sharedpreference. Чтобы преобразовать список в String, я могу использовать toString или joinToString, оба дают мне оптимальный результат. У меня проблема, когда я хочу создать новый список из String. Я могу сделать это со списками типа List<String>, но никогда со списками типа List<ExpenseItem>

Может ли кто-нибудь мне с этим помочь?

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Простой способ, вы можете использовать библиотеку Gson, добавить ее в build.gradle, она сериализует ваш список в JSON и сохранит его в SharePreference

  implementation 'com.google.code.gson:gson:2.8.6'
    public void saveItems(List<ExpenseItem> items) {
        if (items != null && !items.isEmpty()) {
            String json = new Gson().toJson(items);
            mSharedPreferences.edit().putString("items", json).apply();
        }
    }

    public List<ExpenseItem> getItems() {
        String json = mSharedPreferences.getString("items", "");
        if (TextUtils.isEmpty(json)) return Collections.emptyList();
        Type type = new TypeToken<List<ExpenseItem>>() {
        }.getType();
        List<ExpenseItem> result = new Gson().fromJson(json, type);
        return result;
    }
1 голос
/ 27 мая 2020

Вам нужно использовать Gson () class. Сначала создайте класс, как показано ниже

class WhateverName(var generalExpensesList: MutableList<ExpenseItem> = mutableListOf()) 

, и передайте свой список этому классу и создайте объект этого класса, а затем нужно сделать из него строку, как показано ниже

Gson().toJson(WhateverName(arrayListOf()))

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

Gson().fromJson("string", WhateverName::class.java)

он даст вам класс WhateverName , вы можете получить доступ к своему списку из него.

...