【问题标题】:Saving a class to internal storage on android/kotlin将类保存到 android/kotlin 上的内部存储
【发布时间】:2019-06-27 23:08:23
【问题描述】:

我正在尝试通过Player 类保存用户数据,如下所示:

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

}

我想知道保存类实例的最佳方法是什么。我认为internal storage 最适合,因为它是用户不需要直接访问的内部应用程序数据。

但是,解释保存类实例的资源并不多——我只看到了保存键值对的示例。

代码:

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
    }

}

任何建议表示赞赏。

【问题讨论】:

  • 使用 gson 将其转换为字符串并将其存储在首选项中
  • 看看at this.

标签: android kotlin


【解决方案1】:

基本上你问的是"serialization"

在 Android 中,您有多种方法可以序列化对象以进行存储:

  • 使用 Java 标准序列化 (not recommended)。请注意,这需要二进制存储(例如数据库 BLOB)或转换为 Base64 以以文本格式存储。
  • 使用序列化库,例如JSON、YAML 等...这将比二进制序列化(Android 的 Parcelable 或 Java 的 Serializable)慢几个数量级,也比二进制 + Base64 慢,所以我认为这不是一个真正有效的选择,除非你绝对想要存储的数据可供人类阅读。

注意Parcelableis not suitable for consitent storage,所以它不是一个选项。

请注意,然而,根据我的经验,我测试了 很多 序列化方法(主要用于 IPC)并且Serializable 足够快,而无需添加所有臃肿的代码来使用ParcelableParcelable 只提供了微不足道的速度增益,不值得为实现和正确维护 Parcelable 类而烦恼。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 2023-03-10
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 2011-10-10
    • 2023-03-08
    相关资源
    最近更新 更多