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;
private String pid;
//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);
this.pid = null;
}
//getter
public LiveData<Collection<Post>> getAccountPostLiveData() {
return this.accountPostsLiveData;
}
public LiveData<ArrayList<Post>> getShopPostLiveData() {
return this.shopPostsLiveData;
}
//API通信メソッド
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 {
//レスポンスエラーを通知
}
}
@Override
public void onFailure(Call<Collection<PostJson>> call, Throwable 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);
}
//投稿作成
public String 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()) {
pid = response.body();
} else {
//レスポンスエラーを通知
}
}
@Override
public void onFailure(Call<String> call, Throwable t) {
//通信エラーを通知
}
});
return pid;
}
//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);
}
//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 {
//レスポンスエラー
}
}
@Override
public void onFailure(Call<ArrayList<PostJson>> call, Throwable t) {
System.out.println("networkError");
System.out.println(t);
//通信エラー
}
});
}
}