Как сохранить 2D-массив в Android с общими настройками в Kotlin? - PullRequest
0 голосов
/ 05 октября 2019

Я хочу сохранить 2D-массив, используя общие настройки?

Здесь я пытаюсь сохранить 2D-массив в общих настройках из одного действия, и после этого я могу загрузить его в другое действие, используя ранее сохраненный 2D-массив, но яЯ не могу сохранить 2D-массив в общих настройках.

   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) {

   }

1 Ответ

0 голосов
/ 09 октября 2019

Мы можем использовать ObjectSerializer. [https://github.com/apache/pig/blob/89c2e8e76c68d0d0abe6a36b4e08ddc56979796f/src/org/apache/pig/impl/util/ObjectSerializer.java] этот классный класс позволяет вам просто сериализовать и десериализовать все типы объектов, так что вы можете просто сохранить их как строку в общий. Вы можете сохранить его так:

    val mArrayTest = arrayListOf<Array<String>>()
    mArrayTest.add(arrayOf("1","3"))
    mArrayTest.add(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()
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...