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