diff --git a/app/src/main/java/com/example/nemophila/TestActivity.java b/app/src/main/java/com/example/nemophila/TestActivity.java index c2571c8..3b2af0b 100644 --- a/app/src/main/java/com/example/nemophila/TestActivity.java +++ b/app/src/main/java/com/example/nemophila/TestActivity.java @@ -24,6 +24,8 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); + Nemophila nemophila = (Nemophila) this.getApplication(); + //テスト用ViewModel(ViewModelが増えた場合はここで準備。spinnerItemに名前も追加すること) //RoomViewModelへのアクセス ShopsViewModel shopsViewModel = new ViewModelProvider(this).get(ShopsViewModel.class); @@ -55,7 +57,8 @@ switch (position){ //ここにテストしたい処理を追加する( 0はShopsViewModel、1はAccountViewModel、2はPostsViewModel) case 0: - shopsViewModel.setViewArea(20.0, 40.0, 10.0, 30.0); + // shopsViewModel.setViewArea(20.0, 40.0, 10.0, 30.0); + shopsViewModel.start(500, nemophila); break; case 1: //accountViewModel.getAccount("1111"); 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 addd584..4f0d8d3 100644 --- a/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java +++ b/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java @@ -15,10 +15,14 @@ import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; -public class ShopsViewModel extends ViewModel { +public class ShopsViewModel extends TimerViewModel { // フィールド final private ShopsRest shopsRest; final private Retrofit retrofit; + private double ux; + private double uy; + private double lx; + private double ly; // ライブデータ final private MutableLiveData> shopsLiveData; @@ -33,12 +37,27 @@ this.shopsRest = retrofit.create(ShopsRest.class); } - public LiveData> getMembersLiveData() { + public LiveData> getShopsLiveData() { return this.shopsLiveData; } + @Override + public void update() { + updateShops(); + // System.out.println("hogehoge"); + } + // 画面を動かす, 又はGPSが移動する度に呼び出される public void setViewArea(double ux, double uy, double lx, double ly) { + this.ux = ux; + this.uy = uy; + this.lx = lx; + this.ly = ly; + + updateShops(); + } + + public void updateShops() { // 画面内に収まる範囲の店舗を取得する Call> call = shopsRest.getShops(ux, uy, lx, ly); diff --git a/app/src/main/java/com/example/nemophila/viewmodels/TimerViewModel.java b/app/src/main/java/com/example/nemophila/viewmodels/TimerViewModel.java new file mode 100644 index 0000000..3ec5dd4 --- /dev/null +++ b/app/src/main/java/com/example/nemophila/viewmodels/TimerViewModel.java @@ -0,0 +1,38 @@ +package com.example.nemophila.viewmodels; + +import com.example.nemophila.Nemophila; + +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import androidx.lifecycle.ViewModel; + +abstract class TimerViewModel extends ViewModel implements Runnable { + private ScheduledThreadPoolExecutor thread = null; + protected Nemophila nemophila; + + + //----------------------------------------------------------------- + // 一定間隔で呼び出す + @Override + public void run() { + update(); + } + + public abstract void update(); + + //----------------------------------------------------------------- + //何ミリ秒ごとにrun()を実行するかを決める + public void start(int interval, Nemophila nemophila) { + this.nemophila = nemophila; + thread = new ScheduledThreadPoolExecutor(1); + thread.scheduleWithFixedDelay(this, interval, 1000L, TimeUnit.MILLISECONDS); + } + + //----------------------------------------------------------------- + // + public void stop() { + thread.shutdown(); + } + //----------------------------------------------------------------- +}