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 |   88 +++++++++++++++++++++++++-------------------
 1 files changed, 50 insertions(+), 38 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 f915575..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
@@ -36,9 +36,8 @@
     private val _categories = MutableLiveData<List<CategoryConfig>>()
     val categories: LiveData<List<CategoryConfig>> = _categories
 
-    // 添加可见分类的 LiveData
-    private val _visibleCategories = MutableLiveData<List<String>>()
-    val visibleCategories: LiveData<List<String>> = _visibleCategories
+    private val _visibleCategories = MutableLiveData<List<CategoryConfig>>()
+    val visibleCategories: LiveData<List<CategoryConfig>> = _visibleCategories
 
     private lateinit var secureStorage: SecureStorage
     private lateinit var currentUserId: String
@@ -147,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),
@@ -165,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,16 +216,13 @@
     }
 
     fun saveCategories(categories: List<CategoryConfig>) {
-        viewModelScope.launch {
-            // 保存到本地
-            secureStorage.saveCategories(currentUserId, categories)
-            // 同步到服务器
-            syncCategoriesToServer(categories)
-            _categories.value = categories
-            
-            // 更新可见分类
-            updateVisibleCategories(categories)
-        }
+        _categories.value = categories
+        // 保存到本地存储
+        secureStorage.saveCategories(currentUserId, categories)
+        // 同步到服务器
+        syncCategoriesToServer(categories)
+        // 更新可见分类
+        updateVisibleCategories(categories)
     }
 
     private fun updateVisibleCategories(categories: List<CategoryConfig>) {
@@ -219,7 +231,7 @@
             .sortedBy { it.order }
             .map { it.name }
         
-        _visibleCategories.value = visibleNames
+        _visibleCategories.value = categories.filter { it.isEnabled }
     }
 
     // 登出时不再清除本地数据

--
Gitblit v1.9.3