如何在kotlin的android共享首选项中存储2D数组?
我想使用共享首选项存储2D数组 在这里,我尝试将一个活动中的2D数组存储在共享首选项中,之后我可以使用以前存储的2D数组将其加载到另一个活动中,但我无法将2D数组存储在共享首选项中如何在kotlin的android共享首选项中存储2D数组?,android,kotlin,multidimensional-array,Android,Kotlin,Multidimensional Array,我想使用共享首选项存储2D数组 在这里,我尝试将一个活动中的2D数组存储在共享首选项中,之后我可以使用以前存储的2D数组将其加载到另一个活动中,但我无法将2D数组存储在共享首选项中 val _rMsg = intent.getStringArrayExtra(rKey) val inflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val parent = _class1
val _rMsg = intent.getStringArrayExtra(rKey)
val inflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val parent = _class11_
val _arData = arrayListOf<Array<String>>()
val sharedPreferences = getSharedPreferences("shared pref", Context.MODE_PRIVATE)
val gson = Gson()
val backJson = sharedPreferences.getString("task_li",null)
val type = TypeToken<ArrayList<>>() {}.type
_arData.add(gson.fromJson(backJson,type))
try {
_arData.add(_rMsg)
val edit = sharedPreferences.edit()
val json = gson.toJson(_arData)
edit.putString("task_li",json)
edit.apply()
for (i in _arData) {
val cardView = inflater.inflate(R.layout._preset_layout, null)
val mT = cardView.findViewById<TextView>(R.id._title__)
mT.text = i[0].toString()
parent.addView(cardView)
}
} catch (ex: Exception) {
}
val\u rMsg=intent.getStringArrayExtra(rKey)
val inflater=getSystemService(Context.LAYOUT\u inflater\u SERVICE)作为LayoutInflater
val parent=_class11_
val _arData=arrayListOf()
val sharedPreferences=getSharedPreferences(“共享优先级”,Context.MODE\u PRIVATE)
val gson=gson()
val backJson=SharedReferences.getString(“task_li”,null)
val type=TypeToken(){}.type
_add(gson.fromJson(backJson,type))
试一试{
_添加数据(_rMsg)
val edit=SharedReferences.edit()
val json=gson.toJson(_arData)
edit.putString(“task_li”,json)
edit.apply()
对于(我在arData){
val cardView=充气机充气(右布局_预设_布局,空)
val mT=cardView.findViewById(R.id.\U title\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuux)
mT.text=i[0].toString()
parent.addView(cardView)
}
}捕获(例如:异常){
}
我们可以使用ObjectSerializer。[]这个很棒的类允许您对每种对象进行简单的序列化和反序列化,这样您就可以将它们作为字符串保存到共享对象中。您可以这样存储它:
val mArrayTest = arrayListOf<Array<String>>()
mArrayTest.add(arrayOf("1","3"))
mArrayTest.add(arrayOf("2","4"))
edit.putString("mArrayTest",ObjectSerializer.serialize(mArrayTest)).commit()
val mArrayTest=arrayListOf()
婚姻测试。添加(数组(“1”、“3”))
婚姻测试。添加(arrayOf(“2”、“4”))
edit.putString(“mArrayTest”,ObjectSerializer.serialize(mArrayTest)).commit()
这样做:
val mTestStr = pref.getString("mArrayTest",null)
if (mTestStr != null) {
val mTestStr2 = ObjectSerializer.deserialize(mTestStr) as ArrayList<Array<String>>
Toast.makeText(this, mTestStr2[0][1].toString(), Toast.LENGTH_SHORT).show()
}
val mTestStr=pref.getString(“mArrayTest”,null)
if(mTestStr!=null){
val mTestStr2=对象序列化程序。反序列化(mTestStr)为ArrayList
Toast.makeText(this,mTestStr2[0][1].toString(),Toast.LENGTH\u SHORT.show())
}
如果需要将数据从一个屏幕传递到另一个屏幕,则无需将数据保存在共享首选项中。如果您使用kotlin,则使用jetpack导航将模型类从一个屏幕转移到另一个屏幕,或使用parceble类。如果需要在多个屏幕中使用相同的数据,并且不更新数据,那么您可以将此数据保存在共享屏幕中preference@NikunjPatel这是合理的。不过,如果要使用SharedReferences,可以将数组转换为逗号分隔的值字符串,然后保存它。我想存储在store中,所以我尝试先将其存储在Preferences中