将类保存到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
}
}