跳到内容
CrossFly 是 100% 开源在 GitHub 关注我们
CrossFlyCrossFly
开始使用

本页面由葡萄牙语机器翻译,可能存在错误。葡萄牙语版本为准。

文件与“偏好设置”

本页面坦诚地说明一次移除。如果你在找 SharedPreferences/UserDefaults,请停下: 在 CrossFly 中这个机制不存在。

⚠️ 轻量持久化已被移除

Settings.appSettings、appSecretKey、refresh() 以及旧的“偏好设置”都不存在了 —— 而且退出时不会自动写入。你要在合适的时机显式写入。

该用什么替代

需要存储… 使用
标志、主题、上次登录(键→值) SQLite 中的键/值表(指南)
blob / 文件 Device.homeFolder 中的一个文件

SQLite 中的键/值(推荐用于配置)

try (SqliteDb db = SqliteDb.open("app.db")) {
   db.exec("CREATE TABLE IF NOT EXISTS kv(k TEXT PRIMARY KEY, v TEXT)");
   db.execute("INSERT OR REPLACE INTO kv(k, v) VALUES(?, ?)", "tema", "escuro");
   String tema = db.queryString("SELECT v FROM kv WHERE k=?", "tema");   // 若不存在则为 null
}

Device.homeFolder 中的简单文件

Device.homeFolder 是应用的基础目录(因平台而异):

平台 homeFolder
桌面 工作目录(cwd)
Android 应用的私有存储
iOS documents 文件夹
String path = Device.homeFolder + "config.json";

byte[] bytes = Utils.readBytes(path);   // ⚠️ 若文件不存在则为 null
if (bytes != null) {
   String json = new String(bytes);
   // … 解析 …
}
// FileHandle (libGDX),用于需要更多控制的情况:
FileHandle fh = Utils.loadFile(path);   // 若未找到则为 null

最佳实践

  • 在正确的时机显式写入(保存配置时、离开某个屏幕时)—— 没有任何东西会 自动持久化。
  • 配置优先选择 SQLite 键值而非零散文件(可事务、可查询)。
  • 读取时始终检查 Utils.readBytes/loadFile 的 null(文件可能不存在)。

常见错误

  • 寻找 Settings.appSettings/SharedPreferences —— 已被移除;不会回来。
  • 假定关闭时会自动写入 —— 没有;请自己写入。
  • 读取不存在的文件时不处理 null。

另见

这个页面有帮助吗?