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.resources.PostsRest;
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>> postsLiveData;
//コンストラクタ
public PostsViewModel() {
this.postsLiveData = 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>> getLiveData() {
return this.postsLiveData;
}
//API通信メソッド
public void fetchPosts(String uid) {
Call<Collection<Post>> call = postsRest.getAccountPosts(uid);
call.enqueue(new Callback<Collection<Post>>() {
@Override
public void onResponse(Call<Collection<Post>> call, Response<Collection<Post>> response) {
if (response.isSuccessful()) {
postsLiveData.setValue(response.body());
} else {
//レスポンスエラーを通知
}
}
@Override
public void onFailure(Call<Collection<Post>> call, Throwable t) {
//通信エラーを通知
}
});
}
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;
}
}