如何将哈希图写入文件并从另一个意图再次读取它

时间:2019-12-28 09:15:09

标签: android kotlin hashmap

我在Kotlin中有一个db.test.aggregate( [ { $addFields: { Field2: { $map: { input: "$Field2", as: "fld2", in: { Field3: "$$fld2.Field3", Field4: { $filter: { input: "$$fld2.Field4", as: "fld4", cond: { $eq: [ "$$fld4.id", "123" ] } } } } } } } }, { $addFields: { Field2: { $filter: { input: "$Field2", as: "f2", cond: { $gt: [ { $size: "$$f2.Field4" }, 0 ] } } } } }, ] ) ,我需要使用意图将其传递给另一个活动,但是它的大小超出了使用常规HashMap的限制,因此我需要将其写到本地文件中然后在我打开第二个意图时再次阅读。

这是我的hashMap putExtra,正在使用private var optionsList: HashMap<String, List<String>> = hashMapOf()方法向其中添加数据。

我尝试使用HashMap.put发送它,但由于包含数百个数据,因此出现了错误。

现在,我需要知道如何将其写入文件并从第二个意图再次调用它。

2 个答案:

答案 0 :(得分:1)

通常,您应该查看应用逻辑,因为这样的问题可能表明设计不佳。

但是无论如何,下一类可以用于在磁盘上存储任何数据类,它使用Gson库进行json序列化:

import android.content.Context
import androidx.preference.PreferenceManager

import com.google.gson.Gson
import com.google.gson.JsonSyntaxException

class SharedSettingsProvider<T>(private val gson: Gson,
                                private val context: Context,
                                private val type: Class<T>,
                                private val key: String) {

    fun commit(model: T?) {
        PreferenceManager
                .getDefaultSharedPreferences(context)
                .edit()
                .putString(key, model?.let { gson.toJson(it) } ?: "")
                .apply()
    }

    fun retrieve(): T? {
        val mPrefs = PreferenceManager.getDefaultSharedPreferences(context)
        val gsonData = mPrefs.getString(key, "")
        return try {
            gson.fromJson(gsonData, type)
        } catch (ex: JsonSyntaxException) {
            null
        }
    }
}

用法:

data class Data(val optionsList: Map<String, List<String>>)
val data = Data(mapOf(...))

const val DATA_KEY = "DATA_KEY"
val provider = SharedSettingsProvider(gson, context, Data::class.java, DATA_KEY)

// write data
provider.commit(data)

// read data
val data1 = provider.retrieve()

答案 1 :(得分:0)

您可以使用序列化将其写入文件。 HashMap是可序列化的。 Here is eample 这是另一个如何完成的示例
How to save HashMap to Shared Preferences?
这是如何在android中保存文件
How to Read/Write String from a File in Android(考虑使用Context.MODE_PRIVATE)

但是,这可能会由于读写存储而使您的应用变慢。