You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

主Activity加载时检测存储中可序列化Data对象是否存在的最优方法

嘿,这个需求其实超简单,咱们只需要把「检查+读取」的逻辑封装成一个小方法,然后在onCreate()里做个简单判断就行,完全不用复杂的逻辑嵌套。

最简实现步骤

首先,先把读取保存的Data对象的逻辑封装成一个方法,当没有保存过或者读取失败时返回null:

private Data loadSavedData() {
    FileInputStream fis = null;
    ObjectInputStream ois = null;
    try {
        // 这里用内置的文件存储,你也可以换成自己的存储路径
        fis = openFileInput("my_data_file");
        ois = new ObjectInputStream(fis);
        return (Data) ois.readObject();
    } catch (FileNotFoundException e) {
        // 文件不存在 = 从未保存过,直接返回null
        return null;
    } catch (IOException | ClassNotFoundException e) {
        // 读取出错或者类不匹配,也返回null(相当于用新对象)
        e.printStackTrace();
        return null;
    } finally {
        // 别忘了关闭流
        try {
            if (ois != null) ois.close();
            if (fis != null) fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

然后在onCreate()里只需要两行代码搞定核心逻辑:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // 先尝试读取已保存的对象
    Data myData = loadSavedData();
    // 如果读取不到(返回null),就新建一个实例
    if (myData == null) {
        myData = new Data();
    }

    // 接下来就可以正常使用myData啦
}
额外提醒
  • 确保你的Data类确实实现了Serializable接口,比如:public class Data implements Serializable,而且类里的所有成员变量也必须是可序列化的(基本类型、String或者也实现了Serializable的类)。
  • 如果你的读写逻辑是用SharedPreferences存储字节数组的,只需要把loadSavedData()里的读取逻辑换成对应的SP读取逻辑就行,核心判断逻辑完全一样。
  • 上面的写法避免了重复调用读取方法,比三元运算符的写法更高效(不用做两次IO操作),也更易读。

内容的提问来源于stack exchange,提问作者laurie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:47:55