diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java index d70436f..effcf58 100644 --- a/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java @@ -1,17 +1,41 @@ package com.example.tampopo_client.viewmodels; +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; +import com.example.tampopo_client.models.User; import com.example.tampopo_client.resources.UserResource; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; +/*userだけなのでサーバーから情報を取ってくることは名前の変更 +viewModelはviewからrequestをもらってmodelに流す +88行目にviewからviewmodelをとる +viewmodelのインスタンスは1個しかなし +128 観測するという宣言をする +observeは2つ引数をもち、一つ目は固定、2つ目は 無名クラスで長い new observerとあるがこれはインスタンスを作っているわけではないここでしかない使わないローカルなクラス +observerの子クラスである。 observerの無名子クラスと生成するのとインスタンスを作成する 画面の変更をlistenしている + +viewModel側  +viewModelからsetValueで値を変えていく +updateUserName、updateEmail、login、createUserもある。それらを書いていく。viewから必要なものを出していく +*/ + public class UserViewModel extends ViewModel { private final Retrofit retrofit; private final UserResource userResource; + private final MutableLiveData user = new MutableLiveData<>(); + private final MutableLiveData token = new MutableLiveData<>(); + private final MutableLiveDataloading = new MutableLiveData<>(false); + private final MutableLiveData error = new MutableLiveData<>(); + //コンストラクタ public UserViewModel(){ this.retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo-server/") @@ -19,4 +43,30 @@ .build(); this.userResource = retrofit.create(UserResource.class); } + + public LiveData getUser() { return user; } + public LiveData getToken() { return token; } + public LiveDataisLoading() { return loading;} + public LiveData getError() { return error; } + + //新規登録 + public void createUser(String id, String password) { + loading.setValue(true); + userResource.createUser(id, password).enqueue(new Callback() { + @Override public void onResponse(Call c, Response res) { + loading.setValue(false); + if (res.isSuccessful()) { + user.setValue(res.body()); + } else { + error.setValue("登録失敗: " + res.code()); + } + } + @Override public void onFailure(Call c, Throwable t) { + loading.setValue(false); + error.setValue("ネットワークエラー: " + t.getMessage()); + } + }); + } + + //viewModelのところでを呼び出すがフレンド系は西村さんの方で管理する }