From 2a78024e90851a3da06207e6148e7e49a493a1da Mon Sep 17 00:00:00 2001 From: Eric85710 Date: Wed, 3 Jun 2026 15:59:33 +0800 Subject: [PATCH] dm-72 --- .../login_v3/data/api/api_class/DM_Basic.kt | 10 ++++---- .../Message/ViewModel/Message_ViewModel.kt | 25 +++++++++++++------ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/example/login_v3/data/api/api_class/DM_Basic.kt b/app/src/main/java/com/example/login_v3/data/api/api_class/DM_Basic.kt index 0c1d650..2af46f3 100644 --- a/app/src/main/java/com/example/login_v3/data/api/api_class/DM_Basic.kt +++ b/app/src/main/java/com/example/login_v3/data/api/api_class/DM_Basic.kt @@ -15,12 +15,12 @@ data class RoomListResponse( data class ChatRoom( @Json(name = "room_id") val roomId: String, @Json(name = "room_name") val roomName: String?, - @Json(name = "room_type") val roomType: String, + @Json(name = "room_type") val roomType: String? = null, // 🎯 修正這裡:改成 String? 並加上預設值,解決閃退問題! @Json(name = "room_icon_url") val roomIconUrl: String?, - @Json(name = "is_muted") val isMuted: Boolean, - @Json(name = "is_pinned") val isPinned: Boolean, - @Json(name = "unread_count") val unreadCount: Int, - @Json(name = "mention_count") val mentionCount: Int, + @Json(name = "is_muted") val isMuted: Boolean = false, // 💡 安全防護:若後端漏傳,預設為 false + @Json(name = "is_pinned") val isPinned: Boolean = false, // 💡 安全防護:若後端漏傳,預設為 false + @Json(name = "unread_count") val unreadCount: Int = 0, // 💡 安全防護:若後端漏傳,預設為 0 + @Json(name = "mention_count") val mentionCount: Int = 0, // 💡 安全防護:若後端漏傳,預設為 0 @Json(name = "partner") val partner: Partner?, @Json(name = "last_message") val lastMessage: LastMessage? ) diff --git a/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Message_ViewModel.kt b/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Message_ViewModel.kt index 2a0d106..3b3fb97 100644 --- a/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Message_ViewModel.kt +++ b/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Message_ViewModel.kt @@ -30,17 +30,28 @@ class ChatRoomsViewModel @Inject constructor( fun loadRooms() { viewModelScope.launch { + Log.d("ChatRoomsDebug", "1. 開始呼叫 loadRooms()...") val result = repository.fetchRooms() - result.onSuccess { response -> - _roomsState.value = response.rooms - response.rooms.forEach { room -> - val status = room.partner?.status - val name = room.partner?.displayName - println("Debug_API: User: $name, Status: '$status'") + result.onSuccess { response -> + val roomsList = response.rooms + Log.d("ChatRoomsDebug", "2. API 請求成功!拿到 ${roomsList?.size ?: 0} 個聊天室") + + if (roomsList.isNullOrEmpty()) { + Log.w("ChatRoomsDebug", "⚠️ 注意:後端回傳的 rooms 列表是空的(或為 null)!") + } else { + roomsList.forEach { room -> + Log.d("ChatRoomsDebug", "-> 房間 ID: ${room.roomId}, 名稱: ${room.roomName}, Partner: ${room.partner?.displayName}, 狀態: ${room.partner?.status}") + } } + + // 更新狀態 + _roomsState.value = roomsList ?: emptyList() + Log.d("ChatRoomsDebug", "3. _roomsState 已更新,當前長度: ${_roomsState.value.size}") + }.onFailure { error -> - Log.e("ChatRoomsViewModel", "Fetch failed", error) + // ⭐ 這裡非常重要,一定要印出 stackTrace 才知道為什麼失敗(例如:JSON 解析失敗、404、網路斷線) + Log.e("ChatRoomsDebug", "❌ API 請求失敗 (onFailure)!!", error) } } }