From b808650f7c9456f83ab272be1203d5ad7a20bafe Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期三, 02 四月 2025 10:37:36 +0800
Subject: [PATCH] fix : 分类缓存
---
app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt | 70 ++++++++++++++++++++++------------
1 files changed, 45 insertions(+), 25 deletions(-)
diff --git a/app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt b/app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt
index 9699b1e..80483dc 100644
--- a/app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt
+++ b/app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt
@@ -146,16 +146,43 @@
fun loadCategories() {
viewModelScope.launch {
try {
- // 先尝试从服务器获取配置
- val serverCategories = RetrofitClient.apiService.getUserCategories(currentUserId)
- if (serverCategories.isNotEmpty()) {
- _categories.value = serverCategories
- secureStorage.saveCategories(currentUserId, serverCategories)
+ // 先尝试从本地获取配置
+ val localCategories = secureStorage.getCategories(currentUserId)
+ if (localCategories.isNotEmpty()) {
+ // 如果本地有配置,直接使用本地配置
+ _categories.value = localCategories
+ // 同时尝试从服务器更新
+ try {
+ val serverCategories = RetrofitClient.apiService.getUserCategories(currentUserId)
+ if (serverCategories.isNotEmpty()) {
+ _categories.value = serverCategories
+ secureStorage.saveCategories(currentUserId, serverCategories)
+ }
+ } catch (e: Exception) {
+ // 服务器获取失败,继续使用本地配置
+ Log.e("HomeViewModel", "Failed to fetch server categories: ${e.message}")
+ }
} else {
- // 如果服务器没有配置,尝试获取本地配置
- val localCategories = secureStorage.getCategories(currentUserId)
- if (localCategories.isEmpty()) {
- // 如果本地也没有配置,使用默认配置
+ // 如果本地没有配置,尝试从服务器获取
+ try {
+ val serverCategories = RetrofitClient.apiService.getUserCategories(currentUserId)
+ if (serverCategories.isNotEmpty()) {
+ _categories.value = serverCategories
+ secureStorage.saveCategories(currentUserId, serverCategories)
+ } else {
+ // 如果服务器也没有配置,使用默认配置
+ val defaultCategories = listOf(
+ CategoryConfig(1, "快递", 0),
+ CategoryConfig(2, "还款", 1),
+ CategoryConfig(3, "收入", 2),
+ CategoryConfig(4, "航班", 3),
+ CategoryConfig(5, "火车票", 4)
+ )
+ _categories.value = defaultCategories
+ secureStorage.saveCategories(currentUserId, defaultCategories)
+ }
+ } catch (e: Exception) {
+ // 如果服务器请求失败,使用默认配置
val defaultCategories = listOf(
CategoryConfig(1, "快递", 0),
CategoryConfig(2, "还款", 1),
@@ -164,24 +191,13 @@
CategoryConfig(5, "火车票", 4)
)
_categories.value = defaultCategories
- syncCategoriesToServer(defaultCategories)
- } else {
- _categories.value = localCategories
- syncCategoriesToServer(localCategories)
+ secureStorage.saveCategories(currentUserId, defaultCategories)
}
}
+ // 更新可见分类
+ _categories.value?.let { updateVisibleCategories(it) }
} catch (e: Exception) {
- // 如果网络请求失败,使用本地数据
- val localCategories = secureStorage.getCategories(currentUserId)
- _categories.value = localCategories.ifEmpty {
- listOf(
- CategoryConfig(1, "快递", 0),
- CategoryConfig(2, "还款", 1),
- CategoryConfig(3, "收入", 2),
- CategoryConfig(4, "航班", 3),
- CategoryConfig(5, "火车票", 4)
- )
- }
+ Log.e("HomeViewModel", "Failed to load categories: ${e.message}")
}
}
}
@@ -201,8 +217,12 @@
fun saveCategories(categories: List<CategoryConfig>) {
_categories.value = categories
+ // 保存到本地存储
+ secureStorage.saveCategories(currentUserId, categories)
+ // 同步到服务器
+ syncCategoriesToServer(categories)
// 更新可见分类
- _visibleCategories.value = categories.filter { it.isEnabled }
+ updateVisibleCategories(categories)
}
private fun updateVisibleCategories(categories: List<CategoryConfig>) {
--
Gitblit v1.9.3