你有没有遇到过这种情况——辛苦在App里配置好的参数、游戏打到的最高分,退出应用再打开,一切归零?这不是Bug,而是App Inventor的天然行为:每次运行都会重新初始化所有变量。想让App真正记住东西,你需要TinyDB微数据库。
基础概念
TinyDB是App Inventor内置的本地持久化组件,采用标签-值模型。每个数据项由一个文本标签和一个值(文本/数字/列表)组成:存的时候按标签存,取的时候按标签取。
生命周期规则
- 正常退出再打开 → 数据保留
- App覆盖更新 → 数据保留
- 卸载App重装 → 数据清空
- AI伴侣中切项目 → 注意共享(所有项目共用AI伴侣的TinyDB空间)
实战一:存取基本数据
记录用户首次打开App的时间:
存储(在Screen.Initialize中使用):
TinyDB1.保存值 标签 first_launch 值 Clock1.Now()
读取:
变量 上次时间 ← TinyDB1.获取值 标签 first_launch 无标签时返回值 首次访问
如果标签不存在,获取值会返回你指定的默认值。
实战二:保存游戏最高分(含列表回存)
存储分数列表比单个值更优雅:
TinyDB1.保存值 标签 all_scores 值 (创建列表 1200 2300 1800)
读取后仍然是一个列表对象,可直接用选择列表项操作。经测试验证,列表存入后再读取,长度和元素顺序都正确。
实战三:多屏幕数据共享
TinyDB可以在同一App的不同屏幕之间共享数据:
Screen1(登录页):
TinyDB1.保存值 标签 logged_in_user 值 小明 打开屏幕 Screen2
Screen2(个人中心):
变量 当前用户 ← TinyDB1.获取值 标签 logged_in_user 无标签时返回值 未登录
不用全局变量、不用传参——跨屏幕共享就这么简单。
常见坑点
坑1:AI伴侣环境数据串飞
所有项目共用AI伴侣的TinyDB。切项目前建议手动清除数据,或给每个项目的标签加唯一前缀。
坑2:TinyDB不能跨App共享
跨应用数据分享需要用CloudDB或自建后端API(通过Web组件)。
坑3:值类型限制
不支持存储组件对象(如按钮、标签)或连接对象,但支持嵌套列表。
坑4:覆盖写入不留历史
重复保存同一标签会覆盖旧值。需要保存操作日志的话,用递增标签保存多条记录。
快速决策树
需要本地持久化? ├─ 仅当前App内用 → TinyDB ├─ 跨App共享 → CloudDB / TinyWebDB ├─ 存大文件 → 文件管理器组件 └─ 结构化数据 → 数据文件组件(CSV/JSON)
发布到应用市场前,记得先清除AI伴侣中的测试数据再打包!
参考文档:App Inventor 2 官方文档 — 数据存储组件(www.fun123.cn/reference/c…