【问题标题】:Android Studio SerializationAndroid Studio 序列化
【发布时间】:2020-02-23 21:18:42
【问题描述】:

我有一个问题。我有一个应用程序并将所有数据存储在“模型”类中,我想通过序列化来保存它。这是模型:

import android.os.Parcel
import android.os.Parcelable
import java.io.Serializable


private lateinit var att : IntArray
private lateinit var ess :String
private lateinit var skills : MutableList<IntArray>
private lateinit var attSkill : MutableList<IntArray>


class Model : Serializable {
    init {
        att = IntArray(9) { 1 }
        ess = "6"

      }


    fun getAttributes() : IntArray{
        return att
    }
    fun setAttributes(position : Int, value : Int){
        att[position] = value
    }   
}

我保存它:

 val fos = context.openFileOutput(filename, Context.MODE_PRIVATE)
            val os = ObjectOutputStream(fos)
            this.saveStuff()   //[Just write Attributes to model here]
            var newModel = controller.getModel()
            os.writeObject(newModel)

并加载它:

  val fis = context.openFileInput(filename)
                val input = ObjectInputStream(fis)
                val model = input.readObject() as Model
                this.loadStuff(model)
                input.close()

现在我明白了:假设我使用文件名“test1”保存值 1 2 3 4,然后将值 4 3 2 1 保存在“test2”中。之后我加载“test1”并得到 4 3 2 1。事实上,我只是在加载数据的那一刻得到了我的应用程序正确的值。使用 Log.d() 在加载函数中检查它。 重新启动应用程序后,如果我加载“test1”或“test2”,我将获得默认值。

我错过了什么吗?或者这只是人们实际将 Json 用于此类事情的一个例子。

【问题讨论】:

    标签: android kotlin serialization


    【解决方案1】:

    att、ess 等不是Model 的成员,因此 snd 不会序列化到磁盘。将它们拉入类定义以解决该问题:

    class Model : Serializable {
    
        private lateinit var att : IntArray
        private lateinit var ess :String
        private lateinit var skills : MutableList<IntArray>
        private lateinit var attSkill : MutableList<IntArray>
    
        init {
            att = IntArray(9) { 1 }
            ess = "6"
    
          }
    
    
        fun getAttributes() : IntArray{
            return att
        }
        fun setAttributes(position : Int, value : Int){
            att[position] = value
        }   
    }
    

    您需要为这些属性提供(反)序列化逻辑。 Kotlin 的 @Parcelize 注释可能在这里很有趣。

    【讨论】:

    • Epic Facepalm ...谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多