diff --git a/.idea/misc.xml b/.idea/misc.xml
index 5bd1665..ea2ccf2 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -13,9 +13,12 @@
+
-
-
+
+
+
+
diff --git a/app/build.gradle b/app/build.gradle
index 2570292..a9e99ad 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -55,4 +55,7 @@
//google用
implementation 'com.google.maps:google-maps-services:0.2.5'
implementation 'org.slf4j:slf4j-nop:1.7.25'
+
+ //RecycleView用
+ implementation 'androidx.recyclerview:recyclerview:1.2.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 24039df..aab75db 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,11 +1,12 @@
+ package="com.example.nemophila">
+
+ tools:targetApi="31"
+ android:usesCleartextTraffic="true">
+ tools:targetApi="31">
+ android:label="@string/title_activity_gps">
-
-
+
+
-
-
+
+
+
+ android:label="@string/title_activity_sign_up">
-
-
+
+
-
-
+
+
+
+
android:label="@string/title_activity_login" >
+
+
@@ -86,35 +94,33 @@
+ android:label="@string/title_activity_maps">
+
+
-
-
-
-
-
-
+
+
+
+ android:label="@string/title_activity_test">
+
+
-
-
-
-
-
-
+
+
+
+ android:label="@string/title_activity_post">
+ android:label="@string/title_activity_shop">
\ No newline at end of file
diff --git a/app/src/main/java/com/example/nemophila/MainActivity.java b/app/src/main/java/com/example/nemophila/MainActivity.java
index d5c1cff..d287f6a 100644
--- a/app/src/main/java/com/example/nemophila/MainActivity.java
+++ b/app/src/main/java/com/example/nemophila/MainActivity.java
@@ -301,6 +301,9 @@
public void onLocationChanged(Location location) {
//現在地が変更されるたびに現在地アイコンを移動
+ /*
+ テスト用。現在座標を画面に表示
+ */
// 緯度の表示
TextView textView1 = findViewById(R.id.text_view1);
String str1 = "Latitude:"+location.getLatitude();
@@ -310,10 +313,9 @@
TextView textView2 = findViewById(R.id.text_view2);
String str2 = "Longitude:"+location.getLongitude();
textView2.setText(str2);
-//
-// //GoogleMapに送って表示
-// moveToGMap(location);
- setIcon(location.getLatitude(),location.getLongitude());
+
+ //現在地アイコンを表示
+ setIcon(location.getLatitude(),location.getLongitude());
}
@Override
diff --git a/app/src/main/java/com/example/nemophila/ShopActivity.java b/app/src/main/java/com/example/nemophila/ShopActivity.java
index e8fdb1c..fe69e34 100644
--- a/app/src/main/java/com/example/nemophila/ShopActivity.java
+++ b/app/src/main/java/com/example/nemophila/ShopActivity.java
@@ -14,6 +14,7 @@
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shop);
+ //右上のボタンで投稿画面へ遷移
Button postButton = (Button)findViewById(R.id.postButton);
postButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
@@ -21,5 +22,9 @@
startActivity(intent);
}
});
+
+ ////RecycleView
+ //super.onCreate(savedInstanceState);
+
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/nemophila/ShopActivityAdapter.java b/app/src/main/java/com/example/nemophila/ShopActivityAdapter.java
new file mode 100644
index 0000000..47b2da1
--- /dev/null
+++ b/app/src/main/java/com/example/nemophila/ShopActivityAdapter.java
@@ -0,0 +1,26 @@
+package com.example.nemophila;
+
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+public class ShopActivityAdapter extends RecyclerView.Adapter {
+
+
+ @NonNull
+ @Override
+ public ShopActivityViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ return null;
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ShopActivityViewHolder holder, int position) {
+
+ }
+
+ @Override
+ public int getItemCount() {
+ return 0;
+ }
+}
diff --git a/app/src/main/java/com/example/nemophila/ShopActivityViewHolder.java b/app/src/main/java/com/example/nemophila/ShopActivityViewHolder.java
new file mode 100644
index 0000000..5ca11ed
--- /dev/null
+++ b/app/src/main/java/com/example/nemophila/ShopActivityViewHolder.java
@@ -0,0 +1,13 @@
+package com.example.nemophila;
+
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+public class ShopActivityViewHolder extends RecyclerView.ViewHolder {
+
+ public ShopActivityViewHolder(@NonNull View itemView) {
+ super(itemView);
+ }
+}
diff --git a/app/src/main/java/com/example/nemophila/TestActivity.java b/app/src/main/java/com/example/nemophila/TestActivity.java
index a8ed66a..3b2af0b 100644
--- a/app/src/main/java/com/example/nemophila/TestActivity.java
+++ b/app/src/main/java/com/example/nemophila/TestActivity.java
@@ -6,30 +6,67 @@
import android.os.Bundle;
import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemSelectedListener;
+import android.widget.ArrayAdapter;
import android.widget.Button;
-import android.widget.Toast;
+import android.widget.Spinner;
-import com.example.nemophila.entities.Shop;
+import com.example.nemophila.viewmodels.AccountViewModel;
+import com.example.nemophila.viewmodels.PostsViewModel;
import com.example.nemophila.viewmodels.ShopsViewModel;
-import java.util.Collection;
-
public class TestActivity extends AppCompatActivity {
+ int position; //テスト用
+
@Override
protected void onCreate(Bundle savedInstanceState) {
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);
+ AccountViewModel accountViewModel = new ViewModelProvider(this).get(AccountViewModel.class);
+ PostsViewModel postsViewModel = new ViewModelProvider(this).get(PostsViewModel.class);
+ //テスト用のspinner
+ Spinner spinner = findViewById(R.id.testspinner);
+ String[] spinnerItems = {"ShopsViewModel", "AccountViewModel", "PostsViewModel"}; //ここに名前を追加
+ ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, spinnerItems);
+ adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ spinner.setAdapter(adapter);
+ spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView> adapterView, View view, int i, long l) {
+ position = i;
+ }
+ @Override
+ public void onNothingSelected(AdapterView> adapterView) {
+
+ }
+ });
// setViewModelのテスト用
Button setViewModelButton = (Button)findViewById(R.id.setViewModel);
setViewModelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- shopsViewModel.setViewArea(20.0, 40.0, 10.0, 30.0);
+ switch (position){
+ //ここにテストしたい処理を追加する( 0はShopsViewModel、1はAccountViewModel、2はPostsViewModel)
+ case 0:
+ // shopsViewModel.setViewArea(20.0, 40.0, 10.0, 30.0);
+ shopsViewModel.start(500, nemophila);
+ break;
+ case 1:
+ //accountViewModel.getAccount("1111");
+ break;
+ case 2:
+ //postsViewModel.fetchPosts("1");
+ break;
+ }
}
});
}
diff --git a/app/src/main/java/com/example/nemophila/entities/Post.java b/app/src/main/java/com/example/nemophila/entities/Post.java
index 8169350..fc17f1d 100644
--- a/app/src/main/java/com/example/nemophila/entities/Post.java
+++ b/app/src/main/java/com/example/nemophila/entities/Post.java
@@ -1,4 +1,64 @@
package com.example.nemophila.entities;
public class Post {
+ private String id;
+ private String genre;
+ private String image1;
+ private String image2;
+ private String image3;
+ private int rate;
+ private String comment;
+ private Account owner;
+
+ //Getter
+ public String getId() {
+ return id;
+ }
+ public String getGenre() {
+ return genre;
+ }
+ public String getImage1() {
+ return image1;
+ }
+ public String getImage2() {
+ return image2;
+ }
+ public String getImage3() {
+ return image3;
+ }
+ public int getRate() {
+ return rate;
+ }
+ public String getComment() {
+ return comment;
+ }
+ public Account getOwner() {
+ return owner;
+ }
+
+ //Setter
+ public void setId(String id) {
+ this.id = id;
+ }
+ public void setGenre(String genre) {
+ this.genre = genre;
+ }
+ public void setImage1(String image1) {
+ this.image1 = image1;
+ }
+ public void setImage2(String image2) {
+ this.image2 = image2;
+ }
+ public void setImage3(String image3) {
+ this.image3 = image3;
+ }
+ public void setRate(int rate) {
+ this.rate = rate;
+ }
+ public void setComment(String comment) {
+ this.comment = comment;
+ }
+ public void setOwner(Account owner) {
+ this.owner = owner;
+ }
}
diff --git a/app/src/main/java/com/example/nemophila/resources/AccountsRest.java b/app/src/main/java/com/example/nemophila/resources/AccountsRest.java
index 5f0f243..81e0aa5 100644
--- a/app/src/main/java/com/example/nemophila/resources/AccountsRest.java
+++ b/app/src/main/java/com/example/nemophila/resources/AccountsRest.java
@@ -59,7 +59,7 @@
@PUT("accounts/{uid}/name")
Call changeName(
@Path("uid") String uid,
- @Field("name") String oldPw,
+ @Field("name") String name,
@Field("token") String token
);
diff --git a/app/src/main/java/com/example/nemophila/resources/PostsRest.java b/app/src/main/java/com/example/nemophila/resources/PostsRest.java
index 1791bd4..da76051 100644
--- a/app/src/main/java/com/example/nemophila/resources/PostsRest.java
+++ b/app/src/main/java/com/example/nemophila/resources/PostsRest.java
@@ -34,7 +34,7 @@
);
@GET("shops/{sid}/posts")
- Call> getShopPosts(
+ Call> getShopPosts(
@Path("sid") String sid
);
}
diff --git a/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java b/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java
index fc670fa..b8d13de 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java
@@ -16,7 +16,6 @@
// フィールド
private final Retrofit retrofit;
private final AccountsRest accountsRest;
-
// ライブデータ
private final MutableLiveData accountLiveData;
@@ -30,7 +29,7 @@
this.accountsRest = retrofit.create(AccountsRest.class);
}
- // ライブデータの取得
+ // ライブデータの取得(ゲッター)
public MutableLiveData getAccountLiveData() {
return accountLiveData;
}
@@ -55,6 +54,46 @@
});
}
+ // アカウント情報の削除
+ public void deleteAccount(String uid) {
+ Call call = accountsRest.deleteAccount(uid);
+
+ call.enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ if (response.isSuccessful()) {
+ System.out.println("successful");
+ } else {
+ System.out.println("response error");
+ }
+ }
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ System.out.println("correspondence error");
+ }
+ });
+ }
+
+ // アカウントパスワードの変更
+ public void changePw(String uid, String oldPw, String newPw, String token) {
+ Call call = accountsRest.changePw(uid, oldPw, newPw, token);
+
+ call.enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ if (response.isSuccessful()) {
+ System.out.println("successful");
+ } else {
+ System.out.println("response error");
+ }
+ }
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ System.out.println("correspondence error");
+ }
+ });
+ }
+
// アカウント名の変更
public void changeName(String uid, String name, String token) {
Call call = accountsRest.changeName(uid, name, token);
diff --git a/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java b/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java
index 5e32ce2..887769c 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java
@@ -23,12 +23,24 @@
final private Retrofit retrofit;
final private PostsRest postsRest;
private String pid;
- private ArrayList postJsons = new ArrayList<>();
//LiveData
final private MutableLiveData> accountPostsLiveData;
final private MutableLiveData> shopPostsLiveData;
+ //テスト用のリスト
+ private ArrayList testPostsList;
+ //テスト用のメソッド
+ private void createSamplePost() {
+ Post post1 = new Post();
+ Post post2 = new Post();
+
+ post1.setId("ID1");
+ post2.setId("ID2");
+
+ testPostsList.add(post1);
+ testPostsList.add(post2);
+ }
//コンストラクタ
public PostsViewModel() {
@@ -40,6 +52,8 @@
.build();
this.postsRest = retrofit.create(PostsRest.class);
this.pid = null;
+ this.testPostsList = new ArrayList<>();
+ createSamplePost();
}
//getter
@@ -67,6 +81,7 @@
});
}
+ //投稿作成
public String createPost(String uid, String token, String sid,
String rate, String genre, String comment,
String image1, String image2, String image3) {
@@ -90,29 +105,22 @@
return pid;
}
- private void getShopPostJsons(String sid) {
- Call> call = postsRest.getShopPosts(sid);
- call.enqueue(new Callback>() {
+ public void getShopPostJson(String sid) {
+ Call> call = postsRest.getShopPosts(sid);
+ call.enqueue(new Callback>() {
@Override
- public void onResponse(Call> call, Response> response) {
+ public void onResponse(Call> call, Response> response) {
if (response.isSuccessful()) {
- postJsons = response.body();
+ shopPostsLiveData.setValue(response.body());
} else {
//レスポンスエラー
}
}
@Override
- public void onFailure(Call> call, Throwable t) {
+ public void onFailure(Call> call, Throwable t) {
//通信エラー
}
});
}
-
- public void getShopPosts(String sid) {
- getAccountPosts(sid);
- for(PostJson pj: this.postJsons) {
-
- }
- }
}
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();
+ }
+ //-----------------------------------------------------------------
+}
diff --git a/app/src/main/res/layout/activity_shop.xml b/app/src/main/res/layout/activity_shop.xml
index 108efca..ae997d6 100644
--- a/app/src/main/res/layout/activity_shop.xml
+++ b/app/src/main/res/layout/activity_shop.xml
@@ -34,6 +34,7 @@
app:layout_constraintVertical_bias="0.032" />
+
+