1

在我的应用程序中,我使用这个类作为模型:

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)

如您所见,模型字段之一也是字符串类型列表,以防它很重要

好吧,我的意图是将此列表转换为字符串,将其保存为共享首选项,然后使用从共享首选项中检索到的字符串创建一个新列表。要将列表转换为字符串,我可以使用 toString 或 joinToString,两者都给了我最佳结果。当我想从字符串创建一个新列表时,我遇到了问题。我可以使用类型列表来做到这一点List<String>,但从不使用类型列表List<ExpenseItem>

有人可以帮我弄这个吗?

4

2 回答 2

2

简单的方法,您可以使用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;
    }
于 2020-05-27T08:38:41.433 回答
1

您需要使用Gson()类。首先像下面这样制作课程

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

并将您的列表传递给此类并创建此类的对象,然后需要像下面一样制作它的字符串

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

它会给你字符串并将其作为字符串保存到首选项。从首选项中检索字符串后,您需要再次将其转换为该对象,以便使用下面的代码。

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

它会给你WhatName的类,你可以从中访问你的列表。

于 2020-05-27T08:41:35.847 回答