package com.example.nemophila.viewmodels; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import com.example.nemophila.entities.Post; import com.example.nemophila.entities.PostJson; import com.example.nemophila.resources.PostsRest; import java.util.ArrayList; import java.util.Collection; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; public class PostsViewModel extends ViewModel { //Field final private Retrofit retrofit; final private PostsRest postsRest; //LiveData final private MutableLiveData<Collection<Post>> accountPostsLiveData; final private MutableLiveData<ArrayList<Post>> shopPostsLiveData; //コンストラクタ public PostsViewModel() { this.accountPostsLiveData = new MutableLiveData<>(); this.shopPostsLiveData = new MutableLiveData<>(); this.retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/nemophila/") .addConverterFactory(JacksonConverterFactory.create()) .build(); this.postsRest = retrofit.create(PostsRest.class); } //getter public LiveData<Collection<Post>> getAccountPostLiveData() { return this.accountPostsLiveData; } public LiveData<ArrayList<Post>> getShopPostLiveData() { return this.shopPostsLiveData; } //AccountのpostJsonを取得 public void getAccountPosts(String uid) { Call<Collection<PostJson>> call = postsRest.getAccountPosts(uid); call.enqueue(new Callback<Collection<PostJson>>() { @Override public void onResponse(Call<Collection<PostJson>> call, Response<Collection<PostJson>> response) { if (response.isSuccessful()) { setAccountPostLiveData(response.body()); } else { System.out.println("AccountPosts ResponseError"); } } @Override public void onFailure(Call<Collection<PostJson>> call, Throwable t) { System.out.println("AccountPosts NetWorkError: " + t); } }); } //PostJsonからPostを作成し,それをLiveDataにセット private void setAccountPostLiveData(Collection<PostJson> postJson) { ArrayList<Post> posts = new ArrayList<>(); for(PostJson pj: postJson) { Post post = new Post(pj); posts.add(post); } accountPostsLiveData.setValue(posts); } //ShopのPostJsonを取得 public void getShopPostJson(String sid) { Call<ArrayList<PostJson>> call = postsRest.getShopPosts(sid); call.enqueue(new Callback<ArrayList<PostJson>>() { @Override public void onResponse(Call<ArrayList<PostJson>> call, Response<ArrayList<PostJson>> response) { if (response.isSuccessful()) { ArrayList<PostJson> postJson = response.body(); setShopPostLiveData(postJson); } else { System.out.println("ShopPosts ResponseError"); } } @Override public void onFailure(Call<ArrayList<PostJson>> call, Throwable t) { System.out.println("ShopPosts NetWorkError: " + t); System.out.println(t); //通信エラー } }); } //PostJsonからPostを作成し,それをLiveDataにセット private void setShopPostLiveData(ArrayList<PostJson> postJson) { ArrayList<Post> posts = new ArrayList<>(); for(PostJson pj: postJson) { Post post = new Post(pj); posts.add(post); } shopPostsLiveData.setValue(posts); } //投稿作成 public void createPost(String uid, String token, String sid, String rate, String genre, String comment, String image1, String image2, String image3) { Call<String> call = postsRest.postAccountPost(uid ,token, sid, rate, genre, comment, image1, image2, image3); call.enqueue(new Callback<String>() { @Override public void onResponse(Call<String> call, Response<String> response) { if (response.isSuccessful()) { System.out.println("Success CreatePost" + response.body()); } else { System.out.println("CreatePosts ResponseError"); } } @Override public void onFailure(Call<String> call, Throwable t) { System.out.println("CreatePosts NetWorkError: " + t); } }); } }