我在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
发送它,但由于包含数百个数据,因此出现了错误。
现在,我需要知道如何将其写入文件并从第二个意图再次调用它。
答案 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)
但是,这可能会由于读写存储而使您的应用变慢。