diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index b268ef3..6ea2813 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -4,6 +4,14 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/example/tampopo_client/models/FriendRequest.java b/app/src/main/java/com/example/tampopo_client/models/FriendRequest.java
index 939f0b7..726fe9c 100644
--- a/app/src/main/java/com/example/tampopo_client/models/FriendRequest.java
+++ b/app/src/main/java/com/example/tampopo_client/models/FriendRequest.java
@@ -1,10 +1,18 @@
package com.example.tampopo_client.models;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
public class FriendRequest {
private Integer id;
+ @JsonProperty("sender-id")
private String senderId;
+ @JsonProperty("receiver-id")
private String receiverId;
+ // Jackson のデシリアライズのためにデフォルトコンストラクタが必要
+ public FriendRequest() {
+ }
+
public FriendRequest(String senderId, String receiverId) {
this.senderId = senderId;
this.receiverId = receiverId;
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..8b402ac 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
@@ -1,11 +1,13 @@
package com.example.tampopo_client.viewmodels;
+import android.util.Log;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
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;
@@ -13,86 +15,88 @@
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;
-import retrofit2.converter.scalars.ScalarsConverterFactory;
public class FriendReceivedRequestViewModel extends ViewModel {
- //サーバー(API)と通信するためのツール
private final Retrofit retrofit;
- //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出来るように
public MutableLiveData> getReceivedRequestsLiveData() {
return receivedRequests;
}
- //サーバーから受け取ったFriendReceivedRequestのデータを格納してキャッシュしていくぞ
- public void loadReceivedRequests(String token) {
- //tokenを渡して、受信フレンド申請一覧を取得するHTTPリクエスト(Webのサーバーに対して何かをお願いするメッセージ」)を作る準備をしている
+ public void loadReceivedRequests(String token, String myUserId) {
+ if (myUserId == null || myUserId.isEmpty()) {
+ Log.e("FriendVM", "myUserId is null or empty");
+ return;
+ }
+
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());
+ List allRequests = response.body();
+ List receivedOnly = new ArrayList<>();
+
+ Log.d("FriendVM", "Total requests received from server: " + (allRequests != null ? allRequests.size() : 0));
+
+ if (allRequests != null) {
+ for (FriendRequest req : allRequests) {
+ String receiver = req.getReceiverId();
+ Log.d("FriendVM", "Checking request: Sender=" + req.getSenderId() + ", Receiver=" + receiver + " against MyID=" + myUserId);
+
+ // 比較をより堅牢に(トリムして大文字小文字を無視しない場合でも一致を確認)
+ if (receiver != null && receiver.trim().equals(myUserId.trim())) {
+ receivedOnly.add(req);
+ }
+ }
+ }
+
+ receivedRequests.setValue(receivedOnly);
+ Log.d("FriendVM", "Filtered requests for current user: " + receivedOnly.size());
operationResult.setValue("Success");
- System.out.println("Success SetValue" + response.body());
} else {
operationResult.setValue("Error: " + response.code());
- System.out.println("response error");
+ Log.e("FriendVM", "Server returned error: " + response.code());
}
}
@Override
public void onFailure(Call> call, Throwable t) {
operationResult.setValue("Network error: " + t.getMessage());
- System.out.println("ネットワークエラー: " + t);
+ Log.e("FriendVM", "Network failure", t);
}
});
}
- // フレンドリクエスト削除メソッド
+
public void deleteFriendRequest(String friendRequestId, String token) {
Call call = friendRequestsResource.deleteFriendRequest(friendRequestId, token);
-
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
operationResult.setValue("Friend request deleted successfully.");
- loadReceivedRequests(token); // 削除後、一覧を更新
- System.out.println("Deleted friend request ID: " + friendRequestId);
} else {
operationResult.setValue("Error deleting request: " + response.code());
- System.out.println("Error deleting request: " + response.code());
}
}
-
@Override
public void onFailure(Call call, Throwable t) {
operationResult.setValue("Network error: " + t.getMessage());
- System.out.println("Network error: " + t);
}
});
}
-}
-
-
-
+}
\ No newline at end of file
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..ac9bebe 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
@@ -1,65 +1,44 @@
package com.example.tampopo_client.views;
-import android.content.Context;
import android.os.Bundle;
-
-import androidx.fragment.app.Fragment;
-import androidx.lifecycle.Observer;
-import androidx.lifecycle.ViewModelProvider;
-import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
import com.example.tampopo_client.R;
import com.example.tampopo_client.Tampopo;
import com.example.tampopo_client.models.FriendRequest;
-import com.example.tampopo_client.viewmodels.FriendSentRequestViewModel;
-import com.example.tampopo_client.views.placeholder.FriendRequestContent;
-import com.example.tampopo_client.viewmodels.FriendViewModel;
import com.example.tampopo_client.viewmodels.FriendReceivedRequestViewModel;
+import com.example.tampopo_client.viewmodels.FriendViewModel;
+import com.example.tampopo_client.views.placeholder.FriendRequestContent;
+import java.util.ArrayList;
import java.util.List;
-/**
- * A fragment representing a list of Items.
- */
public class FriendReceivedFragment extends Fragment {
- // TODO: Customize parameter argument names
- private static final String ARG_COLUMN_COUNT = "column-count";
- // TODO: Customize parameters
- private int mColumnCount = 1;
-
private Tampopo tampopo;
+ private MyFriendRequestRecyclerViewAdapter adapter;
- /**
- * Mandatory empty constructor for the fragment manager to instantiate the
- * fragment (e.g. upon screen orientation changes).
- */
public FriendReceivedFragment() {
}
- // TODO: Customize parameter initialization
- @SuppressWarnings("unused")
- public static FriendReceivedFragment newInstance(int columnCount) {
- FriendReceivedFragment fragment = new FriendReceivedFragment();
- Bundle args = new Bundle();
- args.putInt(ARG_COLUMN_COUNT, columnCount);
- fragment.setArguments(args);
- return fragment;
+ public static FriendReceivedFragment newInstance() {
+ return new FriendReceivedFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-
- if (getArguments() != null) {
- mColumnCount = getArguments().getInt(ARG_COLUMN_COUNT);
- }
+ tampopo = (Tampopo) getActivity().getApplication();
}
@Override
@@ -67,45 +46,48 @@
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_friend_received_list, container, false);
- FriendViewModel friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class);
-
- tampopo = (Tampopo) getActivity().getApplication();
- String receiverId = tampopo.getUserId();
- String token = tampopo.getToken();
-
-
- // Add some sample items.
-// for (int i = 1; i <= 30; i++)
-// FriendRequestContent.addItem(new FriendRequestContent.FriendRequestItem(Integer.toString(i), "ユーザ名" + i));
-
- // Set the adapter
if (view instanceof RecyclerView) {
- Context context = view.getContext();
RecyclerView recyclerView = (RecyclerView) view;
- if (mColumnCount <= 1) {
- recyclerView.setLayoutManager(new LinearLayoutManager(context));
- } else {
- recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount));
- }
- recyclerView.setAdapter(new MyFriendRequestRecyclerViewAdapter(FriendRequestContent.ITEMS, friendViewModel, receiverId, token));
+ recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
+
+ FriendViewModel friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class);
+
+ // アダプターを初期化
+ adapter = new MyFriendRequestRecyclerViewAdapter(
+ new ArrayList<>(),
+ friendViewModel,
+ tampopo.getUserId(),
+ tampopo.getToken()
+ );
+ recyclerView.setAdapter(adapter);
}
return view;
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- FriendReceivedRequestViewModel friendReceivedRequestViewModel = new ViewModelProvider(this).get(FriendReceivedRequestViewModel.class);
- friendReceivedRequestViewModel.loadReceivedRequests(tampopo.getToken());
- friendReceivedRequestViewModel.getReceivedRequestsLiveData().observe(getViewLifecycleOwner(), new Observer>() {
-
- // LiveData に変更があったとき(新しい友達リクエストのリストが届いたとき)に呼ばれるメソッド
- @Override
- public void onChanged(List friendRequests) {
- for (FriendRequest f: friendRequests) {
- FriendRequestContent.addItem(new FriendRequestContent.FriendRequestItem(f.getSenderId(), "ユーザー名"));
+
+ FriendReceivedRequestViewModel viewModel = new ViewModelProvider(this).get(FriendReceivedRequestViewModel.class);
+
+ // データの監視
+ viewModel.getReceivedRequestsLiveData().observe(getViewLifecycleOwner(), friendRequests -> {
+ Log.d("FriendFragment", "Received updated requests list, size: " + (friendRequests != null ? friendRequests.size() : 0));
+
+ if (friendRequests != null) {
+ List displayItems = new ArrayList<>();
+ for (FriendRequest req : friendRequests) {
+ // IDと表示名(とりあえずID)を設定
+ displayItems.add(new FriendRequestContent.FriendRequestItem(req.getSenderId(), req.getSenderId()));
+ }
+
+ if (adapter != null) {
+ adapter.setItems(displayItems);
}
}
});
+
+ // データの読み込み
+ viewModel.loadReceivedRequests(tampopo.getToken(), tampopo.getUserId());
}
}
\ No newline at end of file
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:表示される友達の名前