diff --git a/app/src/main/java/com/example/citrusclient/rest/FavoritesRest.java b/app/src/main/java/com/example/citrusclient/rest/FavoritesRest.java index 4848018..cffd5df 100644 --- a/app/src/main/java/com/example/citrusclient/rest/FavoritesRest.java +++ b/app/src/main/java/com/example/citrusclient/rest/FavoritesRest.java @@ -1,5 +1,7 @@ package com.example.citrusclient.rest; +import com.example.citrusclient.models.Book; + import java.util.HashMap; import java.util.HashSet; @@ -14,9 +16,9 @@ public interface FavoritesRest { //主{account_id}がいいねした本の一覧 - @FormUrlEncoded + @GET("accounts/{account_id}/favorites") - Call>> getFavoritesBooks( + Call>> getFavoritesBooks( @Path("account_id") String accountId, @Query("token") String token ); diff --git a/app/src/main/java/com/example/citrusclient/viewmodels/FavoritesViewModel.java b/app/src/main/java/com/example/citrusclient/viewmodels/FavoritesViewModel.java index 5887c1f..0ba119b 100644 --- a/app/src/main/java/com/example/citrusclient/viewmodels/FavoritesViewModel.java +++ b/app/src/main/java/com/example/citrusclient/viewmodels/FavoritesViewModel.java @@ -1,5 +1,6 @@ package com.example.citrusclient.viewmodels; +import com.example.citrusclient.models.Book; import com.example.citrusclient.rest.FavoritesRest; import java.util.HashMap; @@ -17,7 +18,7 @@ private final Retrofit retrofit; private final FavoritesRest favoritesRest; - private final MutableLiveData>> favoritesBooksLiveData; + private final MutableLiveData>> favoritesBooksLiveData; private final MutableLiveData> favoritesBookIdLiveData; private final MutableLiveData> favoritedAccountsLiveData; @@ -31,15 +32,15 @@ this.favoritesBookIdLiveData = new MutableLiveData<>(); this.favoritedAccountsLiveData = new MutableLiveData<>(); } - public MutableLiveData>> getFavoritesBooksLiveData(){return favoritesBooksLiveData;} + public MutableLiveData>> getFavoritesBooksLiveData(){return favoritesBooksLiveData;} public MutableLiveData> getFavoritesBookIdLiveData(){return favoritesBookIdLiveData;} public MutableLiveData> getFavoritedAccountsLiveData(){return favoritedAccountsLiveData;} public void loadFavoritesBooks(String accountId, String token){ - Call>> call = favoritesRest.getFavoritesBooks(accountId,token); - call.enqueue(new Callback>>() { + Call>> call = favoritesRest.getFavoritesBooks(accountId,token); + call.enqueue(new Callback>>() { @Override - public void onResponse(Call>> call, Response>> response) { + public void onResponse(Call>> call, Response>> response) { if(response.isSuccessful()){ System.out.println("success : getFavoritesBooks"); favoritesBooksLiveData.setValue(response.body()); @@ -47,7 +48,7 @@ } @Override - public void onFailure(Call>> call, Throwable t) { + public void onFailure(Call>> call, Throwable t) { System.out.println("NetworkError : getFavoritesBooks" + t); } }); diff --git a/app/src/main/java/com/example/citrusclient/views/FavoritesBooksFragment.java b/app/src/main/java/com/example/citrusclient/views/FavoritesBooksFragment.java index 2e70529..31261d8 100644 --- a/app/src/main/java/com/example/citrusclient/views/FavoritesBooksFragment.java +++ b/app/src/main/java/com/example/citrusclient/views/FavoritesBooksFragment.java @@ -1,5 +1,7 @@ package com.example.citrusclient.views; +import android.app.Activity; +import android.content.Context; import android.content.res.ColorStateList; import android.graphics.Color; import android.os.Bundle; @@ -7,6 +9,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,8 +22,11 @@ import com.example.citrusclient.Citrus; import com.example.citrusclient.R; import com.example.citrusclient.models.Book; +import com.example.citrusclient.viewmodels.FavoritesViewModel; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; /** * A simple {@link Fragment} subclass. @@ -67,6 +73,9 @@ mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } + + favoritesViewModel = new ViewModelProvider(this).get(FavoritesViewModel.class); + } @Override @@ -82,15 +91,12 @@ HashMap integerBookHashMap; HashMap> data; + FavoritesViewModel favoritesViewModel; @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); Citrus citrus = (Citrus) (getActivity().getApplication()); bookList = new HashMap<>(); - HashMap nittaBooks = new HashMap<>(); - nittaBooks.put(1, new Book("niita", 1, "ダイエット", true, "#7744FF")); - nittaBooks.put(3, new Book("niita", 3, "PHP", true, "#FF4455")); - bookList.put("nitta", nittaBooks); // いいねした本の一覧を返すのに必要 RecyclerView recyclerView = view.findViewById(R.id.my_favorites_list); //いいねした本の一覧 @@ -100,28 +106,40 @@ FavoritesBooksAdapter favoritesBooksAdapter = new FavoritesBooksAdapter(bookList); recyclerView.setAdapter(favoritesBooksAdapter); + favoritesViewModel.getFavoritesBooksLiveData().observe(getViewLifecycleOwner(), favoritesBooks -> { + bookList = favoritesBooks; // アダプターに新しいリストを渡す + ((FavoritesBooksAdapter)recyclerView.getAdapter()).setFavoritesBooks(favoritesBooks); + + }); + favoritesViewModel.loadFavoritesBooks(citrus.getAccountId(), citrus.getToken()); + } } class FavoritesBooksAdapter extends RecyclerView.Adapter { - private HashMap> favoritesBooksList; + + private List books = new ArrayList<>(); //private HashMap integerBookHashMap; //private HashMap> data; FavoritesBooksAdapter(HashMap> favoritesBooksList) { //初期化 - this.favoritesBooksList = favoritesBooksList; + + for (String account: favoritesBooksList.keySet()){ + for (int number: favoritesBooksList.get(account).keySet()){ + books.add(favoritesBooksList.get(account).get(number)); + } + } // this.data = data; // this.integerBookHashMap = new HashMap<>(); } public void setFavoritesBooks(HashMap> favoritesBooksList) { - this.favoritesBooksList = favoritesBooksList; -// if(integerBookHashMap != null) { -// this.integerBookHashMap = new HashMap<>(integerBookHashMap); -// } else { -// this.integerBookHashMap = new HashMap<>(); -// } + for (String account: favoritesBooksList.keySet()){ + for (int number: favoritesBooksList.get(account).keySet()){ + books.add(favoritesBooksList.get(account).get(number)); + } + } notifyDataSetChanged(); } @@ -141,23 +159,25 @@ // // holder.favorites_book.setText(book.getTitle()); - int count = 0; - for (String otherAccountId: favoritesBooksList.keySet()) { - HashMap bookMap = favoritesBooksList.get(otherAccountId); - for (Integer bookId : bookMap.keySet()) { - Book book = bookMap.get(bookId); - if (count == position){ - holder.other_id.setText(otherAccountId); - holder.favorites_book.setText(book.getTitle()); - int parsedColor = Color.parseColor(book.getColor()); - holder.favorites_book.setBackgroundTintList(ColorStateList.valueOf(parsedColor)); - return; - } - count++; +// int count = 0; +// for (String otherAccountId: favoritesBooksList.keySet()) { +// HashMap bookMap = favoritesBooksList.get(otherAccountId); +// for (Integer bookId : bookMap.keySet()) { +// Book book = bookMap.get(bookId); +// if (count == position){ + holder.other_id.setText(books.get(position).getAccountId()); + holder.favorites_book.setText(books.get(position).getTitle()); + int parsedColor = Color.parseColor(books.get(position).getColor()); + holder.favorites_book.setBackgroundTintList(ColorStateList.valueOf(parsedColor)); + Context context = holder.itemView.getContext(); + holder.favorites_book.setOnClickListener(v -> { + Activity activity = (Activity) context; + Citrus citrus = (Citrus) activity.getApplication(); + citrus.setCurLookingAccountId(books.get(position).getAccountId()); + citrus.setCurLookingBookId(books.get(position).getBookId()); + ((MainActivity) activity).showFragment(new OtherHomeFragment()); + }); - } - - } } @@ -174,7 +194,7 @@ @Override public int getItemCount() { - return favoritesBooksList.size(); + return books.size(); } // これがないとclassにエラー } diff --git a/app/src/main/res/layout/a_favorites_book.xml b/app/src/main/res/layout/a_favorites_book.xml index 446445b..89d0cc1 100644 --- a/app/src/main/res/layout/a_favorites_book.xml +++ b/app/src/main/res/layout/a_favorites_book.xml @@ -10,7 +10,7 @@