Сохранение класса во внутреннюю память на android / kotlin - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь сохранить пользовательские данные через класс Player, как показано ниже:

class Player(name: String, age: Int, gender: String) {

}

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

Однако не так много ресурсов, объясняющих сохранение экземпляров классов - я вижу только примеры сохранения пар ключ-значение.

Код:

import kotlinx.android.synthetic.main.activity_player_details.*


class PlayerDetails : AppCompatActivity(), View.OnClickListener {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_player_details)

        val intent = getIntent()
        val players = intent.getIntExtra("number_of_players", 1)
        println(players)

        next_details.setOnClickListener(this)
    }

    override fun onClick(v: View?) {

        val name: String = player_name.text.toString()

        val age = if (player_age.text.toString().isNotEmpty()) player_age.text.toString().toInt() else 0
        val genderId: Int = gender.checkedRadioButtonId
        val gender: String = if (genderId > 0) resources.getResourceEntryName(genderId) else ""

        if (name.isNotEmpty() && genderId > 0 && age > 0 ){
            println(name)
            println(age)
            println(gender)

            val player = Player(name, age, gender) // I WANT TO SAVE THIS INSTANCE
        } else {
            blankFields()
        }
    }

    private fun blankFields() {
        blank_fields_error.visibility = View.VISIBLE
    }

}

Любой совет приветствуется.

1 Ответ

0 голосов
/ 04 февраля 2019

В основном то, что вы спрашиваете, называется "сериализация" .

В Android у вас есть несколько способов сериализации объекта для хранения:

  • Используйте стандартную сериализацию Java ( не рекомендуется ).Обратите внимание, что для этого требуется двоичное хранилище (например, BLOB базы данных) или его необходимо преобразовать в Base64 для хранения в текстовом формате.
  • Использовать библиотеку сериализации, например, JSON, YAML и т. Д. Это будет несколькоЗначения медленнее, чем двоичная сериализация (Parcelable для Android или Java Serializable), а также медленнее, чем двоичная + Base64, поэтому, на мой взгляд, это не совсем правильный вариант, если только вы не хотите, чтобы сохраненные данные были удобочитаемыми для человека.

Обратите внимание, что Parcelable не подходит для хранения данных , поэтому это не вариант.

Обратите внимание, что, по моему опыту, я тестировал много методов сериализации (в основном для IPC) и Serializable были достаточно быстрыми без добавления всего раздутого кода для использования Parcelable.Parcelable только при условии незначительного прироста скорости не стоило хлопот в реализации и правильном поддержании Parcelable классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...