news 2026/6/15 7:12:01

2026山东大学软件学院项目实训个人博客(七)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2026山东大学软件学院项目实训个人博客(七)

一、本周进展

本周主要针对数据库不完善的地方进行了优化。

二、具体改进

1. 游戏数据同步机制


问题分析 :游戏数据无法自动同步到后端数据库,主要原因包括:

- 缺少同步状态标记字段
- 部分游戏直接调用本地存储,绕过同步逻辑
- 同步成功后未更新状态
解决方案 :

// 在训练记录表中添加 synced 字段 private const val COLUMN_SYNCED = "synced" // 同步逻辑 suspend fun syncAllHistoryRecords(): Int = withContext(Dispatchers.IO) { val localRecords = dbHelper.getUnsyncedRecords() if (localRecords.isEmpty()) return@withContext 0 val recordsToSync = localRecords.map { record -> mapOf( "record_id" to (record["id"] as? Int ?: 0), "child_id" to (record["childId"] as? Int ?: 0), "game_id" to (record["gameId"] as? Int ?: 0), "raw_score" to (record["score"] as? Int ?: 0), "normalized_score" to (record["score"] as? Int ?: 0), "stars_earned" to 0, "completion_time_sec" to (record["duration"] as? Int ?: 0), "errors" to 0, "hints_used" to 0, "is_completed" to (record["isCompleted"] as? Boolean ?: true), "created_at" to (record["date"] as? String ?: "") ) } val count = backendRepo.syncTrainingRecordsBatch(recordsToSync) recordsToSync.forEach { record -> val recordId = record["record_id"] as? Int if (recordId != null && recordId > 0) { dbHelper.markRecordAsSynced(recordId.toLong()) } } count }

2. 一键同步功能


在个人中心页面添加了同步按钮,方便用户手动触发数据同步:

// ProfilePage.kt MenuItem( text = { Text("🔄 同步数据到服务器") }, onClick = { coroutineScope.launch { isSyncing = true val count = gameRepository?.syncAllHistoryRecords() ?: 0 isSyncing = false val message = if (count > 0) { "同步成功!已同步 $count 条训练记录" } else { "没有需要同步的记录" } Toast.makeText(context, message, Toast.LENGTH_SHORT).show() } }, enabled = !isSyncing )

3. 数据库结构设计

表名功能核心字段
users用户信息id, username, password_hash, role
children孩子档案id, name, age, info(诊断结果)
parent_child_relation亲子关系parent_user_id, child_id
training_records训练记录child_id, game_id, raw_score, stars_earned, completion_time_sec

4. 数据可视化支持

为方便家长端查看孩子的训练数据,设计了以下常用查询接口:

-- 获取某孩子近7天的训练统计 SELECT DATE(created_at) as date, COUNT(*) as total_games, AVG(stars_earned) as avg_stars, SUM(completion_time_sec) as total_time FROM training_records WHERE child_id = ? AND created_at >= DATE('now', '-7 days') GROUP BY DATE(created_at); -- 获取各游戏的平均成绩 SELECT g.name as game_name, COUNT(*) as play_count, AVG(tr.raw_score) as avg_score FROM training_records tr JOIN games g ON tr.game_id = g.id WHERE tr.child_id = ? GROUP BY tr.game_id;

5. 测试数据初始化

为方便开发和测试,生成了完整的测试数据:

- 100个用户 :奇数ID为孩子(c1-c50),偶数ID为家长(p1-p50)
- 50个孩子档案 :包含姓名、年龄、诊断信息
- 5000条训练记录 :覆盖近半个月,包含10种游戏类型

6. 遇到的困难与解决方案

挑战解决方案
游戏数据不同步添加 synced 字段追踪同步状态
部分游戏绕过同步逻辑统一使用 onComplete 回调模式
数据量大查询慢建立索引和优化查询语句

三、未来规划和总结

1. AI智能分析 :基于训练数据为每个孩子生成个性化训练建议
2. 实时同步 :使用 WebSocket 实现数据实时同步
3. 数据可视化 :提供更丰富的图表展示训练进度
StarMate 项目不仅是一个技术实现,更是对自闭症儿童康复事业的一份贡献。通过游戏化的方式,我们希望能够帮助更多自闭症儿童在快乐中成长,为他们的家庭带来希望。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 7:08:51

扩散模型实操指南:从加噪去噪直觉到Stable Diffusion生成控制

1. 这不是数学课,是带你“看见”扩散模型怎么呼吸的实操笔记你点开这篇,大概率是因为刚在某篇论文、某个技术分享里看到“扩散模型”四个字,紧接着就撞上了一堆偏微分方程、变分推断、ELBO下界、随机微分方程……然后默默关掉页面&#xff0c…

作者头像 李华
网站建设 2026/6/15 7:07:51

本体论驱动的AI访问控制:企业Copilot语义防火墙实战

1. 项目概述:这不是“防火墙”,而是企业知识边界的智能守门人 “Ontology Firewall”这个标题一出来,很多同行第一反应是——又一个蹭AI热点的营销话术?但当我真正拆开这篇博文附带的代码仓库、读完作者在GitHub Discussions里回复…

作者头像 李华
网站建设 2026/6/15 7:04:52

Anthropic推理韧性层:让大模型服务不确定性归零

1. 项目概述:这不是一次普通更新,而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题一出来,我在 Slack 上看到好几个技术群瞬间刷屏。不是因为又出了个新模型,而是因为它精…

作者头像 李华
网站建设 2026/6/15 7:03:00

Kubeflow ML 流水线 K8s 部署教程:机器学习工作流编排全攻略

Kubeflow ML 流水线 K8s 部署教程:机器学习工作流编排全攻略 机器学习项目的工程化落地,往往卡在工作流管理这一环。从数据预处理、特征工程、模型训练、超参调优到最终部署,每个步骤都需要精确的依赖管理和资源调度。Kubeflow 正是为解决这一…

作者头像 李华
网站建设 2026/6/15 7:01:43

虚实同频,营区运维智控全域;全域孪生,营区态势一览无余

营区全域数字孪生智能透明运维技术解析白皮书前言当前现代化智慧营区建设进入精细化、平战一体化、安全闭环化攻坚阶段,传统营区运维存在空间底数不清、设备孤立管控、人员动线盲区、应急响应滞后、虚实数据割裂五大痛点:物理营区设施、安防、水电、营房…

作者头像 李华
网站建设 2026/6/15 7:01:06

促销执行核查系统的技术架构设计:从数据采集到合规分析

引言品牌方每年投入大量预算做促销活动,但促销执行是否到位始终是个黑盒问题。促销员是否在岗、话术是否合规、物料是否摆放正确、价格标签是否与促销方案一致——这些都需要系统化的核查方案。本文从技术架构角度,探讨如何设计一个促销执行核查系统。系…

作者头像 李华