cloudroam
2025-04-02 b808650f7c9456f83ab272be1203d5ad7a20bafe
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>) {