第六周总结
本周工作内容
Android学习系统开发
完成SpringBoot后端基础搭建(统一返回类、用户实体、服务层)
实现用户注册/登录功能(含密码加密存储)
开发周目标管理模块(增删改查)
配置MyBatis数据库映射(XML方式)
Android客户端开发
搭建Retrofit网络请求框架
实现用户认证流程(登录状态保持)
开发周目标列表展示(RecyclerView)
添加滑动操作支持(左右滑动切换周目标)
UI界面优化
设计响应式布局(适配不同屏幕)
实现底部导航栏和顶部操作栏
添加数据空状态提示
完善表单验证逻辑
学到的知识
后端技术
SpringBoot异常处理机制
MyBatis动态SQL编写
RESTful接口设计规范
跨域解决方案(CORS配置)
Android开发
Retrofit + Coroutine网络请求
SharedPreferences数据持久化
RecyclerView + DiffUtil高效列表渲染
手势识别(GestureDetector)
架构设计
分层架构(entity/service/controller)
响应式UI更新(LiveData观察)
协程的取消与异常处理
状态管理(单Activity多Fragment)
遇到的问题及解决方法
问题:Retrofit返回数据解析失败
原因:后端返回格式与实体类不匹配
解决:添加Gson的setLenient()模式并统一API响应格式
问题:列表滑动时数据错乱
原因:RecyclerView未正确使用DiffUtil
解决:实现areItemsTheSame和areContentsTheSame方法
问题:协程内存泄漏
原因:Fragment销毁后未取消网络请求
解决:使用lifecycleScope并检查isActive
问题:多Fragment状态同步
解决:通过Activity作为通信中介,实现接口回调
代码统计
SpringBoot后端
实体类:2个(User/WeekGoals)
Mapper接口:2个(约50行)
Service层:2个(约80行)
Controller:2个(约60行)
Android客户端
实体类:3个(含API响应包装)
Adapter:1个(40行)
Fragment:2个(300行)
网络模块:3个(Retrofit配置/Service/拦截器)
UI布局
XML布局文件:6个(登录/注册/主页/列表项等)
菜单资源:2个(底部导航/操作菜单)
关键代码片段
DiffUtil实现
class WeekGoalsDiffCallback : DiffUtil.ItemCallback
override fun areItemsTheSame(oldItem: WeekGoals, newItem: WeekGoals) =
oldItem.id == newItem.id
override fun areContentsTheSame(oldItem: WeekGoals, newItem: WeekGoals) =
oldItem == newItem
}
协程安全请求
lifecycleScope.launch {
try {
if (!isActive) return@launch
val response = weekGoalsService.getWeekGoals(userId)
if (!isActive) return@launch
// 更新UI...
} catch (e: CancellationException) {
// 协程已取消
}
}
手势处理
gestureDetector = GestureDetector(context, object : SimpleOnGestureListener() {
override fun onFling(e1: MotionEvent, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean {
if (abs(diffX) > abs(diffY)) {
if (diffX > 0) showPreviousGoal()
else showNextGoal()
return true
}
return false
}
})
后续计划
实现学习进度统计功能
添加数据本地缓存(Room)
开发周报生成模块
集成图表库实现可视化
优化网络错误处理机制

浙公网安备 33010602011771号