我已经为你完成了完整的基于 DataStore 的缓存策略实现,完全替代了 SharedPreferences。以下是具体的实现细节:
类型转换错误修复:
- 修复了
LinkedHashTreeMap cannot be cast to Banner错误 - 使用类型安全的 JsonAdapter 替代通用适配器
- 确保序列化/反序列化过程的类型安全性
- 所有缓存操作现在都是完全类型安全的
- 📍 位置:
/app/src/main/java/com/thisfeng/composestudykit/cache/DataStoreCacheManager.kt - 🔧 功能:
- 使用 DataStore Preferences 实现现代化缓存
- 异步操作,不阻塞 UI 线程
- 支持协程和 Flow 响应式编程
- 事务性操作,保证数据一致性
- 内置错误处理和重试机制
- 📍 位置:
/app/src/main/java/com/thisfeng/composestudykit/cache/CacheStrategy.kt - 🔧 支持的策略:
NETWORK_ONLY- 仅从网络获取CACHE_ONLY- 仅从缓存获取CACHE_FIRST- 缓存优先(最常用)NETWORK_FIRST- 网络优先,失败时用缓存CACHE_AND_NETWORK- 先返回缓存,同时更新网络数据
- 📍 位置:
/app/src/main/java/com/thisfeng/composestudykit/network/BaseRepository.kt - 🔧 核心功能:
safeApiCallWithCache()- 带 DataStore 缓存策略的安全API调用- 异步缓存管理,不阻塞主线程
- 支持 Flow 响应式数据流
- 多种缓存策略的自动切换
- 类型安全的缓存操作
- 📍 位置:
/app/src/main/java/com/thisfeng/composestudykit/data/repository/WanAndroidRepository.kt - 🔧 功能:
- 为所有 WanAndroid API 提供 DataStore 缓存支持
- 不同数据类型的差异化缓存时间配置
- 异步缓存管理工具(清空、检查状态)
- 便捷方法(仅缓存、强制刷新等)
- 📍 位置:
/app/src/main/java/com/thisfeng/composestudykit/ui/viewmodel/DataStoreComparisonViewModel.kt - 🔧 功能:
- 演示 DataStore 缓存的各种功能
- 实时缓存状态监控
- 支持批量写入、并发测试
- 缓存统计信息展示
- 📍 位置:
/app/src/main/java/com/thisfeng/composestudykit/ui/screen/DataStoreComparisonScreen.kt - 🔧 界面功能:
- 实时显示 DataStore 缓存状态
- 写入/读取测试按钮
- 批量操作和并发性能测试
- DataStore 优势展示
- 异步操作:不阻塞 UI 线程,更流畅的用户体验
- 更好的内存管理:优化的存储机制
- 并发安全:支持多线程并发操作
- 响应速度:协程优化的 I/O 操作
- 类型安全:基于 JsonAdapter 的编译时类型检查
- 严格类型检查:完全序列化/反序列化类型安全
- 协程原生支持:与现代 Android 开发无缝集成
- Flow 支持:响应式编程
- 错误处理:更好的异常处理机制
- 事务性操作:保证数据一致性
- 自动重试:网络失败时的智能重试
- 更好的测试支持:易于单元测试
- 向前兼容:Google 推荐的现代存储方案
// 异步缓存数据
viewModelScope.launch {
dataStoreCacheManager.cacheData("key", jsonData)
}
// 异步读取数据
viewModelScope.launch {
val data = dataStoreCacheManager.getCachedData("key")
}
// Flow 响应式读取
dataStoreCacheManager.getCachedDataFlow("key")
.collect { data ->
// 响应式更新 UI
}// DataStore 缓存优先策略
repository.getBanners(CacheStrategy.CACHE_FIRST)
.collect { result ->
when (result) {
is CacheResult.FromCache -> // 来自 DataStore 缓存
is CacheResult.FromNetwork -> // 来自网络并已缓存到 DataStore
is CacheResult.Failed -> // 加载失败
is CacheResult.Loading -> // 加载中
}
}🎉 项目修复完成!类型安全问题已解决!
目前你的应用已经有 3个Tab页:
- 真实API - 调用真实 WanAndroid 接口(使用 DataStore 缓存)✅ 已修复类型转换错误
- DataStore - 演示 DataStore 缓存功能和优势
- 模拟演示 - 模拟网络请求演示
你可以在 "真实API" Tab 中:
- ✅ 正常调用 WanAndroid 真实 API
- ✅ 体验 DataStore 缓存的所有功能
- ✅ 查看数据来源(缓存/网络)
- ✅ 测试各种缓存策略
你可以在 "DataStore" Tab 中:
- 测试 DataStore 写入和读取
- 进行批量数据操作
- 测试并发性能
- 查看缓存统计信息
- 了解 DataStore 相比 SharedPreferences 的优势
这个 DataStore 缓存实现提供了现代化、生产级别的功能,完全符合 Google 推荐的最佳实践,可以直接用于实际项目中!🎉