cloudroam
2025-04-02 f4a4110d5ebd74cccd38eea6cdeed0bd96d80c5e
fix : 分类缓存
已修改2个文件
126 ■■■■■ 文件已修改
app/src/main/java/com/example/firstapp/ui/home/HomeFragment.kt 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/ui/home/HomeFragment.kt
@@ -322,7 +322,7 @@
                tabFlight.visibility = View.GONE
                tabTrain.visibility = View.GONE
                // 非会员只显示快递和还款
                // 获取用户信息判断是否是会员
                val savedPhone = PreferencesManager.getPhone()
                lifecycleScope.launch {
                    try {
@@ -343,24 +343,24 @@
                            categories.forEach { category ->
                                when (category.name) {
                                    "快递" -> {
                                        tabExpress.visibility = View.VISIBLE
                                        if (categories.indexOf(category) == 0) tabExpress.performClick()
                                        tabExpress.visibility = if (category.isEnabled) View.VISIBLE else View.GONE
                                        if (categories.indexOf(category) == 0 && category.isEnabled) tabExpress.performClick()
                                    }
                                    "还款" -> {
                                        tabFinance.visibility = View.VISIBLE
                                        if (categories.indexOf(category) == 0) tabFinance.performClick()
                                        tabFinance.visibility = if (category.isEnabled) View.VISIBLE else View.GONE
                                        if (categories.indexOf(category) == 0 && category.isEnabled) tabFinance.performClick()
                                    }
                                    "收入" -> {
                                        tabIncome.visibility = View.VISIBLE
                                        if (categories.indexOf(category) == 0) tabIncome.performClick()
                                        tabIncome.visibility = if (category.isEnabled) View.VISIBLE else View.GONE
                                        if (categories.indexOf(category) == 0 && category.isEnabled) tabIncome.performClick()
                                    }
                                    "航班" -> {
                                        tabFlight.visibility = View.VISIBLE
                                        if (categories.indexOf(category) == 0) tabFlight.performClick()
                                        tabFlight.visibility = if (category.isEnabled) View.VISIBLE else View.GONE
                                        if (categories.indexOf(category) == 0 && category.isEnabled) tabFlight.performClick()
                                    }
                                    "火车票" -> {
                                        tabTrain.visibility = View.VISIBLE
                                        if (categories.indexOf(category) == 0) tabTrain.performClick()
                                        tabTrain.visibility = if (category.isEnabled) View.VISIBLE else View.GONE
                                        if (categories.indexOf(category) == 0 && category.isEnabled) tabTrain.performClick()
                                    }
                                }
                            }
@@ -461,9 +461,33 @@
            this.adapter = adapter
        }
        // 加载现有分类
        // 加载所有分类
        homeViewModel.categories.observe(viewLifecycleOwner) { categories ->
            adapter.setCategories(categories)
            // 如果是会员,显示所有分类供选择
            lifecycleScope.launch {
                try {
                    val savedPhone = PreferencesManager.getPhone()
                    val response = RetrofitClient.apiService.getUserInfo(savedPhone ?: "")
                    val isMember = response.code == "0" && response.data?.isMember == true
                    if (isMember) {
                        // 会员可以看到所有分类
                        adapter.setCategories(categories)
                    } else {
                        // 非会员只能看到快递和还款
                        val limitedCategories = categories.filter {
                            it.name == "快递" || it.name == "还款"
                        }
                        adapter.setCategories(limitedCategories)
                    }
                } catch (e: Exception) {
                    // 发生错误时只显示基础分类
                    val limitedCategories = categories.filter {
                        it.name == "快递" || it.name == "还款"
                    }
                    adapter.setCategories(limitedCategories)
                }
            }
        }
        dialogBinding.saveButton.setOnClickListener {
app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt
@@ -17,6 +17,7 @@
import com.example.firstapp.model.IncomeGroup
import com.example.firstapp.model.IncomePackage
import com.example.firstapp.util.SecureStorage
import com.example.firstapp.utils.PreferencesManager
import kotlinx.coroutines.launch
class HomeViewModel : ViewModel() {
@@ -143,59 +144,58 @@
        loadDataByType("火车票")
    }
    fun loadCategories() {
    private fun loadCategories() {
        viewModelScope.launch {
            try {
                // 先尝试从本地获取配置
                val localCategories = secureStorage.getCategories(currentUserId)
                // 默认完整分类列表
                val fullCategories = listOf(
                    CategoryConfig(1, "快递", 0, true),
                    CategoryConfig(2, "还款", 1, true),
                    CategoryConfig(3, "收入", 2, true),
                    CategoryConfig(4, "航班", 3, true),
                    CategoryConfig(5, "火车票", 4, true)
                )
                // 基础分类(非会员可见)
                val basicCategories = listOf(
                    CategoryConfig(1, "快递", 0, true),
                    CategoryConfig(2, "还款", 1, true)
                )
                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 {
                    // 如果本地没有配置,尝试从服务器获取
                    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),
                            CategoryConfig(3, "收入", 2),
                            CategoryConfig(4, "航班", 3),
                            CategoryConfig(5, "火车票", 4)
                        )
                        // 尝试从服务器获取用户信息判断是否是会员
                        val savedPhone = PreferencesManager.getPhone()
                        val response = RetrofitClient.apiService.getUserInfo(savedPhone ?: "")
                        val isMember = response.code == "0" && response.data?.isMember == true
                        // 根据会员状态设置默认分类
                        val defaultCategories = if (isMember) fullCategories else basicCategories
                        _categories.value = defaultCategories
                        secureStorage.saveCategories(currentUserId, defaultCategories)
                        // 同步到服务器
                        try {
                            syncCategoriesToServer(defaultCategories)
                        } catch (e: Exception) {
                            Log.e("HomeViewModel", "Failed to sync categories: ${e.message}")
                        }
                    } catch (e: Exception) {
                        // 如果获取用户信息失败,使用基础分类
                        _categories.value = basicCategories
                        secureStorage.saveCategories(currentUserId, basicCategories)
                    }
                }
                // 更新可见分类
                _categories.value?.let { updateVisibleCategories(it) }
            } catch (e: Exception) {
                Log.e("HomeViewModel", "Failed to load categories: ${e.message}")
            }