diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index cf4f8bc..e5a6c5f 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -7,11 +7,11 @@ - + - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 9194c63..b3a7a61 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -10,6 +10,7 @@ + diff --git a/app/src/main/java/com/example/nemophila/ShopCreateActivity.java b/app/src/main/java/com/example/nemophila/ShopCreateActivity.java index a0dcc9b..51a7ed0 100644 --- a/app/src/main/java/com/example/nemophila/ShopCreateActivity.java +++ b/app/src/main/java/com/example/nemophila/ShopCreateActivity.java @@ -1,11 +1,20 @@ package com.example.nemophila; import androidx.appcompat.app.AppCompatActivity; +import androidx.lifecycle.ViewModelProvider; import android.content.Intent; import android.os.Bundle; +import android.view.Gravity; import android.view.View; import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import com.example.nemophila.entities.Shop; +import com.example.nemophila.viewmodels.ShopsViewModel; + +import java.io.IOException; public class ShopCreateActivity extends AppCompatActivity { @@ -14,18 +23,36 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_shop_create); + Nemophila nemophila = (Nemophila) this.getApplication(); - // お店の名前を取得 + // ShopsViewModelにアクセス + ShopsViewModel shopsViewModel = new ViewModelProvider(this).get(ShopsViewModel.class); - //右下のボタンでShopActivityへ遷移 - //sidを発行してピンを立てたい - Button shopCreateButton = (Button)findViewById(R.id.buttonShopCreate); - shopCreateButton.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - Intent intent = new Intent(getApplication(), ShopActivity.class); - startActivity(intent); - } + // LiveDataへの購読 + shopsViewModel.getCurrentLiveData().observe(this, shop -> { + // ShopActivityでどこの店についての投稿かを管理できるように更新する + nemophila.setCurrentShop(shop); + + // ShopActivityへ画面遷移する + Intent intent = new Intent(getApplication(), ShopActivity.class); + startActivity(intent); }); + // 店の名前が入力されていればsidを発行し、新しくShopを生成 + Button shopCreateButton = findViewById(R.id.buttonShopCreate); + shopCreateButton.setOnClickListener(v -> { + EditText nameTextBox = findViewById(R.id.editTextShopCreate); + String name = nameTextBox.getText().toString(); + + // 店の名前を入力されているときのみ処理を行う + if (!name.equals("")) { + shopsViewModel.createShop(name, nemophila.getCurrentLongitude(), nemophila.getCurrentLatitude()); + // 店の名前を入力されていないときToastを発行 + } else { + Toast ts = Toast.makeText(ShopCreateActivity.this, "名前を入力してください", Toast.LENGTH_SHORT); + ts.setGravity(Gravity.CENTER, 0, 0); + ts.show(); + } + }); } } \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/TestActivity.java b/app/src/main/java/com/example/nemophila/TestActivity.java index f299ae1..85f9381 100644 --- a/app/src/main/java/com/example/nemophila/TestActivity.java +++ b/app/src/main/java/com/example/nemophila/TestActivity.java @@ -26,7 +26,7 @@ Nemophila nemophila = (Nemophila) this.getApplication(); //テスト用ViewModel(ViewModelが増えた場合はここで準備。spinnerItemに名前も追加すること) - //RoomViewModelへのアクセス + //ViewModelへのアクセス ShopsViewModel shopsViewModel = new ViewModelProvider(this).get(ShopsViewModel.class); AccountViewModel accountViewModel = new ViewModelProvider(this).get(AccountViewModel.class); PostsViewModel postsViewModel = new ViewModelProvider(this).get(PostsViewModel.class); diff --git a/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java b/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java index 23a04cb..c171e1e 100644 --- a/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java +++ b/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java @@ -8,6 +8,8 @@ import com.example.nemophila.resources.ShopsRest; import com.google.android.gms.maps.model.Marker; +import java.io.IOError; +import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -33,10 +35,12 @@ // ライブデータ final private MutableLiveData> shopsLiveData; + final private MutableLiveData currentShopLiveData; // コンストラクタ public ShopsViewModel() { this.shopsLiveData = new MutableLiveData<>(); + this.currentShopLiveData = new MutableLiveData<>(); this.retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/nemophila/") .addConverterFactory(JacksonConverterFactory.create()) @@ -44,9 +48,21 @@ this.shopsRest = retrofit.create(ShopsRest.class); } + // ライブデータを返す public LiveData> getShopsLiveData() { return this.shopsLiveData; } + public LiveData getCurrentLiveData() { return this.currentShopLiveData; } + + // ShopToMarkerに新しく店と地図上のピンを紐づける + public void setShopAndMarker(Shop shop, Marker marker) { + ShopToMarker.put(shop, marker); + } + + // 店に紐づいたピンを返す + public Marker getMarker(Shop shop) { + return ShopToMarker.get(shop); + } @Override public void update() { @@ -92,6 +108,7 @@ System.out.println("ステータスコード 不正 : setViewModel"); } } + // 通信が失敗 @Override public void onFailure(Call> call, Throwable t) { @@ -101,13 +118,22 @@ }); } - // ShopToMarkerに新しく店と地図上のピンを紐づける - public void setShopAndMarker(Shop shop, Marker marker) { - ShopToMarker.put(shop, marker); - } + public void createShop(String name, double longitude, double latitude) { + Call call = shopsRest.createShop(name, longitude, latitude); - // 店に紐づいたピンを返す - public Marker getMarker(Shop shop) { - return ShopToMarker.get(shop); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + currentShopLiveData.setValue(response.body()); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("通信失敗 : createShop"); + System.out.println(t); + } + }); } }