执行约束:本对话内联执行,不委派;未经用户授权不提交 Git。按清单逐项验证。
目标:学习成功后以单商品本地入库替代等待全量目录同步,使首次识别显示正确名称和价格。
架构:学习入口保留服务端原始 DishBean;仓库用单线程 I/O 队列先持久化再刷新内存缓存;识别页对缺失 UUID 只发起一次后台目录补全并在补全前禁止该编码计价。全量替换兼容并发增量写入。技术栈:Android Java、SQLite、JUnit 4、Gradle。
执行状态:已完成代码接入、三个目标单测的红绿验证及 Debug 构建;未在用户设备运行会写入其商品目录的仪器测试,真机识别与支付验收待用户安装新包后完成。
文件:DishLearningDish.java、两个学习入口的 mapResponseToDishList、DishLearningDishTest.java。
DishBean,编码不一致时拒绝关联;运行目标单测确认先失败。文件:DishCatalogRepository.java、DishCatalogRepositoryInstrumentedTest.java。
upsertServerDishAsync(Context, DishBean, UpsertCallback):校验 UUID/名称,现有 I/O 队列写 SQLite,成功后更新缓存并回调主线程;不改全量同步时间。文件:NewDishLearningActivity.java、DishRecognitionActivity.java、strings.xml。
文件:DishRecognitionActivity.java、DishCatalogRepository.java、strings.xml 和相关测试。