diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index b268ef3..3050a8b 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -4,6 +4,14 @@ diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/FriendReceivedRequestViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/FriendReceivedRequestViewModel.java index 2542cc1..cfba5cd 100644 --- a/app/src/main/java/com/example/tampopo_client/viewmodels/FriendReceivedRequestViewModel.java +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/FriendReceivedRequestViewModel.java @@ -6,6 +6,7 @@ import com.example.tampopo_client.models.FriendRequest; import com.example.tampopo_client.resources.FriendRequestsResource; +import java.util.ArrayList; import java.util.List; import retrofit2.Call; @@ -16,58 +17,67 @@ import retrofit2.converter.scalars.ScalarsConverterFactory; public class FriendReceivedRequestViewModel extends ViewModel { - //サーバー(API)と通信するためのツール + // サーバー(API)と通信するためのツール private final Retrofit retrofit; - //APIの窓口 + // API の窓口 private final FriendRequestsResource friendRequestsResource; - //自分が受け取った申請 + // 自分が受け取った申請 private final MutableLiveData> receivedRequests; - //通信結果の状態 + // 通信結果の状態 private final MutableLiveData operationResult; public FriendReceivedRequestViewModel() { - this.retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo/") .addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(JacksonConverterFactory.create()) .build(); + this.friendRequestsResource = retrofit.create(FriendRequestsResource.class); - this.receivedRequests = new MutableLiveData<>(); + this.receivedRequests = new MutableLiveData<>(new ArrayList<>()); this.operationResult = new MutableLiveData<>(); } - //viewがobserve出来るように + // viewがobserve出来るように public MutableLiveData> getReceivedRequestsLiveData() { return receivedRequests; } - //サーバーから受け取ったFriendReceivedRequestのデータを格納してキャッシュしていくぞ - public void loadReceivedRequests(String token) { - //tokenを渡して、受信フレンド申請一覧を取得するHTTPリクエスト(Webのサーバーに対して何かをお願いするメッセージ」)を作る準備をしている + // サーバーから受け取った FriendRequest のデータを読み込む + public void loadReceivedRequests(String token, String myUserId) { Call> call = friendRequestsResource.getFriendRequests(token); - //call.enqueueでサーバーへ送信(何を?) call.enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { if (response.isSuccessful()) { - //通信が成功したらLiveDataへのキャッシュ - receivedRequests.setValue(response.body()); - operationResult.setValue("Success"); - System.out.println("Success SetValue" + response.body()); + List allRequests = response.body(); + if (allRequests == null) allRequests = new ArrayList<>(); + + // 自分が受信者であるものだけを抽出してセット + List receivedOnly = new ArrayList<>(); + for (FriendRequest req : allRequests) { + if (req.getReceiverId() != null && req.getReceiverId().equals(myUserId)) { + receivedOnly.add(req); + } + } + + receivedRequests.setValue(receivedOnly); + operationResult.setValue("Success (found " + receivedOnly.size() + " requests)"); + System.out.println("Success SetValue (filtered): " + receivedOnly); } else { operationResult.setValue("Error: " + response.code()); - System.out.println("response error"); + System.out.println("Response error: " + response.code()); } } @Override public void onFailure(Call> call, Throwable t) { operationResult.setValue("Network error: " + t.getMessage()); - System.out.println("ネットワークエラー: " + t); + System.out.println("Network error: " + t); } }); } + // フレンドリクエスト削除メソッド public void deleteFriendRequest(String friendRequestId, String token) { Call call = friendRequestsResource.deleteFriendRequest(friendRequestId, token); @@ -77,7 +87,7 @@ public void onResponse(Call call, Response response) { if (response.isSuccessful()) { operationResult.setValue("Friend request deleted successfully."); - loadReceivedRequests(token); // 削除後、一覧を更新 + // 一覧の再読み込みは Fragment 側で行うか、IDをキャッシュしてここで行う System.out.println("Deleted friend request ID: " + friendRequestId); } else { operationResult.setValue("Error deleting request: " + response.code()); @@ -93,6 +103,3 @@ }); } } - - - diff --git a/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java b/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java index b5a8976..bbe333c 100644 --- a/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java +++ b/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java @@ -22,6 +22,7 @@ import com.example.tampopo_client.viewmodels.FriendViewModel; import com.example.tampopo_client.viewmodels.FriendReceivedRequestViewModel; +import java.util.ArrayList; import java.util.List; /** @@ -35,6 +36,7 @@ private int mColumnCount = 1; private Tampopo tampopo; + private MyFriendRequestRecyclerViewAdapter adapter; /** * Mandatory empty constructor for the fragment manager to instantiate the @@ -87,7 +89,8 @@ } else { recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount)); } - recyclerView.setAdapter(new MyFriendRequestRecyclerViewAdapter(FriendRequestContent.ITEMS, friendViewModel, receiverId, token)); + adapter = new MyFriendRequestRecyclerViewAdapter(new ArrayList<>(), friendViewModel, receiverId, token); + recyclerView.setAdapter(adapter); } return view; } @@ -96,14 +99,26 @@ public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); FriendReceivedRequestViewModel friendReceivedRequestViewModel = new ViewModelProvider(this).get(FriendReceivedRequestViewModel.class); - friendReceivedRequestViewModel.loadReceivedRequests(tampopo.getToken()); + + // 修正: 引数に UserId を追加 + friendReceivedRequestViewModel.loadReceivedRequests(tampopo.getToken(), tampopo.getUserId()); + friendReceivedRequestViewModel.getReceivedRequestsLiveData().observe(getViewLifecycleOwner(), new Observer>() { // LiveData に変更があったとき(新しい友達リクエストのリストが届いたとき)に呼ばれるメソッド @Override public void onChanged(List friendRequests) { - for (FriendRequest f: friendRequests) { - FriendRequestContent.addItem(new FriendRequestContent.FriendRequestItem(f.getSenderId(), "ユーザー名")); + if (friendRequests == null) return; + + List items = new ArrayList<>(); + for (FriendRequest f : friendRequests) { + // 送信者のIDを表示名として使用(暂定) + items.add(new FriendRequestContent.FriendRequestItem(f.getSenderId(), f.getSenderId())); + } + + // アダプターに更新を通知 + if (adapter != null) { + adapter.setItems(items); } } }); diff --git a/app/src/main/java/com/example/tampopo_client/views/MyFriendRequestRecyclerViewAdapter.java b/app/src/main/java/com/example/tampopo_client/views/MyFriendRequestRecyclerViewAdapter.java index 4b7c836..611703b 100644 --- a/app/src/main/java/com/example/tampopo_client/views/MyFriendRequestRecyclerViewAdapter.java +++ b/app/src/main/java/com/example/tampopo_client/views/MyFriendRequestRecyclerViewAdapter.java @@ -20,7 +20,7 @@ public class MyFriendRequestRecyclerViewAdapter extends RecyclerView.Adapter { // 表示するFriendRequestItemのリスト(アダプターのデータ) - private final List mValues; + private List mValues; private FriendViewModel friendViewModel; private String receiverId; @@ -70,6 +70,11 @@ return mValues.size(); } + public void setItems(List items) { + this.mValues = items; + notifyDataSetChanged(); + } + // 各行(View)を保持するための ViewHolder クラス public class ViewHolder extends RecyclerView.ViewHolder { // TextView:表示される友達の名前