【发布时间】:2020-02-07 07:21:38
【问题描述】:
如何将此List<Any> 更改为 text/json 文件然后读取它?
由于此常见问题解答问题和答案将被硬编码,因此我不希望将其直接设置在我的片段中。我打算将信息放入资产文件中,然后从那里读取以生成List
我的List<Any>
val list: List<Any> = arrayListOf(
"General",
FAQ(faqQuestion = "ABC?", faqAnswer = "QWERTY", expanded = false),
FAQ(faqQuestion = "DEF?", faqAnswer = "ZXCVBN", expanded = false),
"Troubleshooting",
FAQ(faqQuestion = "ZXC?", faqAnswer = "POIUYT", expanded = false)
)
我不知道如何将其转换为JSON 或文本文件并成功导出到此List。
到目前为止我尝试的是:
faq.json
[
"General",
{
"expanded":false,
"faqQuestion":"ABC?",
"faqAnswer":"QWERTY"
},
{
"expanded":false,
"faqQuestion":"DEF?",
"faqAnswer":"ZXCVBN"
}
]
文本文件faq.txt
"General",
FAQ(faqQuestion = "ABC?", faqAnswer = "QWERTY", expanded = false),
FAQ(faqQuestion = "DEF?", faqAnswer = "ZXCVBN", expanded = false),
"Troubleshooting",
FAQ(faqQuestion = "ZXC?", faqAnswer = "POIUYT", expanded = false)
从资产中获取的代码:文本
fun loadFromAsset(fileName: String, context: Context): Any? {
val any: Any
try {
val ins = context.getAssets().open(fileName)
val size = ins.available()
val buffer = ByteArray(size)
ins.read(buffer)
ins.close()
any = String(buffer, Charset.forName("UTF-8"))
} catch (ex: IOException) {
ex.printStackTrace()
return null
}
return any
}
var list: List<Any>?
loadFromAsset("faq.txt", requireContext())?.let {
list = arrayListOf(it)
}
JSON
fun loadFromAsset(fileName: String, context: Context): String? {
var json: String? = null
try {
val ins = context.getAssets().open(filename)
val size = ins.available()
val buffer = ByteArray(size)
ins.read(buffer)
ins.close()
json = String(buffer, Charset.forName("UTF-8"))
} catch (ex: IOException) {
ex.printStackTrace()
return null
}
return json
}
val list: List<Any> = Gson().fromJson(loadFromAsset("faq.json", requireContext()), Array<Any>::class.java).asList()
两种方式都无法按照原List<Any>得到
【问题讨论】: