将类保存到android/kotlin上的内部存储

将类保存到android/kotlin上的内部存储,android,kotlin,Android,Kotlin,我试图通过Player类保存用户数据,如下所示: class Player(name: String, age: Int, gender: String) { } 我想知道保存类实例的最佳方法是什么。我认为最适合,因为它是用户不需要直接访问的内部应用程序数据 但是,没有太多的参考资料解释如何保存类实例——我只看到保存键值对的示例 代码: 谢谢你的建议。基本上你所问的就是所谓的 在Android中,有几种方法可以序列化存储对象: 使用Java标准序列化()。请注意,这需要一个二进制存储(例如

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

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

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

但是,没有太多的参考资料解释如何保存类实例——我只看到保存键值对的示例

代码:


谢谢你的建议。

基本上你所问的就是所谓的

在Android中,有几种方法可以序列化存储对象:

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


但是,请注意,根据我的经验,我测试了很多序列化方法(主要针对IPC),并且
Serializable
足够快,无需添加所有臃肿的代码即可使用
Parcelable
Parcelable
仅提供了微不足道的速度增益,不值得实施和正确维护
Parcelable
类。

使用gson将其转换为字符串并存储在首选项中查看
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
    }

}