diff --git a/app/src/main/java/com/example/tampopo_client/resources/ChatroomResource.java b/app/src/main/java/com/example/tampopo_client/resources/ChatroomResource.java index 48f8d72..17fca73 100644 --- a/app/src/main/java/com/example/tampopo_client/resources/ChatroomResource.java +++ b/app/src/main/java/com/example/tampopo_client/resources/ChatroomResource.java @@ -31,9 +31,9 @@ @Query("token") String token ); - // メッセージを閲覧する + // メッセージを閲覧する (Swaggerに基づき単一のメッセージオブジェクトを返すように変更) @GET("chat-rooms/{chat-room-id}/{user-id}") - Call> getMessages( + Call getMessage( @Path("chat-room-id") String chatRoomId, @Path("user-id") String userId, @Query("token") String token diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/ChatViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/ChatViewModel.java index 3ecd347..05537b2 100644 --- a/app/src/main/java/com/example/tampopo_client/viewmodels/ChatViewModel.java +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/ChatViewModel.java @@ -86,8 +86,13 @@ notificationListeners.forEach(NotificationListener::onNotificationReceived); }, 10_000); // 10秒後に通知 } + + // 1. チャットルームの状態を確認 foundChatroom(userId, token); + // 2. チャットルームIDと相手IDがあれば、相手の最新メッセージを取得 + // chatroomId は foundChatroom のレスポンスで非同期に更新されるため、 + // フィールド変数の chatroomId が null でないことを確認する if (chatroomId != null && partnerId != null) { loadLatestMessage(chatroomId, partnerId, token); } @@ -128,7 +133,7 @@ if (response.isSuccessful() && response.body() != null) { Chatroom chatroom = response.body(); this.chatroomId = chatroom.getChatRoomId(); - this.partnerId = user1Id; // かける相手が partnerId + this.partnerId = user1Id; return chatroom.getChatRoomId(); } else { return null; @@ -151,6 +156,7 @@ ? chatroom.getUser1Id() : chatroom.getUser0Id(); + // IDが変わった、または新しく取得できた場合にフィールドとLiveDataを更新 if (chatroomId == null || !chatroomId.equals(fetchedRoomId)) { chatroomId = fetchedRoomId; chatroomIdLiveData.postValue(fetchedRoomId); @@ -182,7 +188,7 @@ @Override public void onResponse(Call call, Response response) { if (response.isSuccessful() && response.body() != null) { - // 送信成功 + // 送信成功時の処理(必要があれば) } } @@ -198,30 +204,33 @@ // 3. 最新メッセージ取得 // =============================== public void loadLatestMessage(String chatroomId, String partnerId, String token) { - // partnerId (相手のID) を指定して、相手の最新メッセージを取得する - Call> call = chatroomResource.getMessages(chatroomId, partnerId, token); - call.enqueue(new Callback>() { + // partnerId (相手のID) を指定して、相手の最新メッセージを1件取得する + Call call = chatroomResource.getMessage(chatroomId, partnerId, token); + call.enqueue(new Callback() { @Override - public void onResponse(Call> call, Response> response) { - if (response.isSuccessful() && response.body() != null && !response.body().isEmpty()) { - ChatMessage message = response.body().get(response.body().size()-1); + public void onResponse(Call call, Response response) { + if (response.isSuccessful() && response.body() != null) { + ChatMessage message = response.body(); - // サーバーからのレスポンスに senderId が含まれていない可能性があるため、手動でセット + // サーバーからのレスポンスには senderId が含まれないため、リクエスト時の partnerId をセット if (message.getSenderId() == null) { message.setSenderId(partnerId); } ChatMessage currentLatest = latestMessage.getValue(); - // 新しいメッセージが届いたか、内容が異なる場合に更新 - if (currentLatest == null || !currentLatest.getContent().equals(message.getContent())) { - latestMessage.postValue(message); + // メッセージがnullでないこと、かつ内容が異なる場合にのみ更新を通知 + if (message.getContent() != null) { + if (currentLatest == null || !message.getContent().equals(currentLatest.getContent())) { + latestMessage.postValue(message); + Log.d("ChatVM", "Received new message from partner: " + message.getContent()); + } } } } @Override - public void onFailure(Call> call, Throwable t) { + public void onFailure(Call call, Throwable t) { Log.e("ChatVM", "loadLatestMessage error: " + t.getMessage()); } });