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 8f9d4ab..b3a7a61 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -10,6 +10,7 @@ + @@ -17,6 +18,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fae94f7..bdefc6e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -114,11 +114,11 @@ android:name=".ShopActivity" android:exported="true" android:label="@string/title_activity_shop"> - - + + - - + + diff --git a/app/src/main/java/com/example/nemophila/LoginActivity.java b/app/src/main/java/com/example/nemophila/LoginActivity.java index 5dd4b79..c3bdf20 100644 --- a/app/src/main/java/com/example/nemophila/LoginActivity.java +++ b/app/src/main/java/com/example/nemophila/LoginActivity.java @@ -31,11 +31,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); + //Nemophilaと連携 nemophila = (Nemophila) this.getApplication(); -// if ((nemophila.getUid() != null) && (nemophila.getToken() != null)){ -// Intent intent = new Intent(LoginActivity.this,MainActivity.class); -// startActivity(intent); -// } + //Nemophilaにtokenとuidがある場合ログイン画面をスキップ + if ((nemophila.getUid() != null) && (nemophila.getToken() != null)){ + Intent intent = new Intent(LoginActivity.this,MainActivity.class); + startActivity(intent); + } //通信の初期化 this.retrofit = new Retrofit.Builder() @@ -44,10 +46,11 @@ .build(); this.AccountsRest = retrofit.create(AccountsRest.class); - +//Loginボタンを押したとき findViewById(R.id.LoginButton).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { + //IDとpwの入力 EditText edituid = (EditText) findViewById(R.id.editTextUserID); String uid = edituid.getText().toString(); EditText editpw = (EditText) findViewById(R.id.editTextTextNewPassword); @@ -86,6 +89,7 @@ }); } }); +//SignUpボタンを押したとき findViewById(R.id.SignUp).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -93,6 +97,7 @@ startActivity(intent); } }); +//ForgotPasswordボタンを押したとき(処理未記入) findViewById(R.id.ForgotPW).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { diff --git a/app/src/main/java/com/example/nemophila/MainActivity.java b/app/src/main/java/com/example/nemophila/MainActivity.java index 2fa42ac..e50541f 100644 --- a/app/src/main/java/com/example/nemophila/MainActivity.java +++ b/app/src/main/java/com/example/nemophila/MainActivity.java @@ -7,7 +7,9 @@ import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; +import android.app.ProgressDialog; import android.os.Bundle; +import android.view.View; import android.widget.ImageButton; import android.widget.Toast; import android.annotation.SuppressLint; @@ -38,9 +40,10 @@ private GoogleMap mMap; private ActivityMainBinding binding; - private LatLng currentLatlng; + private LatLng currentLatlng = null; private LatLng testLatlng; private LatLng testLatlng2; + private LatLng initialLatlng; private GroundOverlay currentOverlay; LocationManager locationManager; @@ -49,8 +52,7 @@ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - //現在地アイコンの取得 - //Drawable ic_current = ResourcesCompat.getDrawable(getResources(),R.drawable.ic_current_location,null); + binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); @@ -105,6 +107,12 @@ testLatlng = new LatLng(latitude, longitude); testLatlng2 = new LatLng(34.74, 135.26); + //初期画面の座標(現在地をロードするまで) + initialLatlng = new LatLng(39,138); + + //初期画面に移動 + mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(initialLatlng, 5f)); + //標準のマーカー(店用のピン) setMarker(latitude, longitude); @@ -112,9 +120,6 @@ //画像関連がわかっていないのでパス //setIcon(latitude, longitude); - // camera 移動 (初期画面) - //mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, 15)); - /* //多分使わない // タップした時のリスナーをセット @@ -171,7 +176,7 @@ } - //ピンの初期設定。完成時不要 + //起動時から立っているピンの設定。完成時不要 private void setMarker(double latitude, double longitude){ MarkerOptions markerOptions = new MarkerOptions(); MarkerOptions markerOptions2 = new MarkerOptions(); @@ -186,7 +191,7 @@ mMap.addMarker(markerOptions2); // ズーム - zoomMap(latitude, longitude); + //zoomMap(latitude, longitude); } @@ -310,8 +315,15 @@ @Override public void onLocationChanged(Location location) { + //初期画面は現在地を中心にするため... + if (currentLatlng == null){ + zoomMap(location.getLatitude(), location.getLongitude()); + findViewById(R.id.LL_Load).setVisibility(View.GONE); + + } + //現在地が変更されるたびに現在地アイコンを移動 - //LatLng型で一応受け取っておく + //LatLng型で受け取っておく currentLatlng = new LatLng(location.getLatitude(), location.getLongitude()); /* diff --git a/app/src/main/java/com/example/nemophila/PostActivity.java b/app/src/main/java/com/example/nemophila/PostActivity.java index abf9115..2875f5a 100644 --- a/app/src/main/java/com/example/nemophila/PostActivity.java +++ b/app/src/main/java/com/example/nemophila/PostActivity.java @@ -2,6 +2,8 @@ import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.Spinner; public class PostActivity extends AppCompatActivity { @@ -9,5 +11,20 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_post); + + //評価を入力するためのプルダウン + ArrayAdapter rateAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item); + rateAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + rateAdapter.add("1"); + rateAdapter.add("2"); + rateAdapter.add("3"); + rateAdapter.add("4"); + rateAdapter.add("5"); + Spinner rateSpinner = (Spinner) findViewById(R.id.inputRate); + rateSpinner.setAdapter(rateAdapter); + + + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/ShopActivity.java b/app/src/main/java/com/example/nemophila/ShopActivity.java index 7ca8ca8..53c5ff9 100644 --- a/app/src/main/java/com/example/nemophila/ShopActivity.java +++ b/app/src/main/java/com/example/nemophila/ShopActivity.java @@ -13,35 +13,59 @@ import android.os.Bundle; import android.view.View; import android.widget.Button; +import android.widget.TextView; import com.example.nemophila.entities.Post; +import com.example.nemophila.entities.Shop; import com.example.nemophila.viewmodels.PostsViewModel; import java.util.ArrayList; import java.util.List; public class ShopActivity extends AppCompatActivity { + private ShopActivityAdapter adapter = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_shop); + //NemophilaからcurrentShopを取得し店名の表示 + //currentshopに何もないとgetNameとgetSidでアプリが落ちます + Shop shop; + String shopName; + String sid; + shop = ((Nemophila)getApplication()).getCurrentShop(); +// shopName = shop.getName(); +// sid = shop.getSid(); + TextView nameView = (TextView) findViewById(R.id.shopName); + //テスト用に仮店名でセット + nameView.setText("お店A"); +// nameView.setText(shopName); + //右上のボタンで投稿画面(PostActivity)へ遷移 - Button buttonToPost = (Button)findViewById(R.id.buttonToPostActivity); - buttonToPost.setOnClickListener(new View.OnClickListener(){ + Button toPostButton = (Button)findViewById(R.id.toPostAcButton); + toPostButton.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ Intent intent = new Intent(getApplication(), PostActivity.class); startActivity(intent); } }); + //左上のボタンでメイン画面へ遷移 + Button returnButton = (Button)findViewById(R.id.shopAcReturnButton); + returnButton.setOnClickListener(new View.OnClickListener(){ + public void onClick(View v){ + Intent intent = new Intent(getApplication(), MainActivity.class); + startActivity(intent); + } + }); + List postsDataset = new ArrayList<>(); - - //RecyclerView + //RecyclerView(表示以外の設定) RecyclerView rv = (RecyclerView) findViewById(R.id.postsList); - ShopActivityAdapter adapter = new ShopActivityAdapter(postsDataset); + adapter = new ShopActivityAdapter(postsDataset); LinearLayoutManager llm = new LinearLayoutManager(this); @@ -52,20 +76,23 @@ rv.setHasFixedSize(true); rv.setLayoutManager(llm); - //通信テスト + //PostViewModelを宣言し、LiveDataへの購読 PostsViewModel postsViewModel = new ViewModelProvider(this).get(PostsViewModel.class); - postsViewModel.getShopPostJson("151347fa-2c90-44d7-ba48-f23f475b910d"); + //通信テスト用データ(本来currentShopのsidをPostJsonに送る) + postsViewModel.loadShopPost("151347fa-2c90-44d7-ba48-f23f475b910d"); //LiveDataへの購読 postsViewModel.getShopPostLiveData().observe(this, new Observer>() { - //private List members; @Override public void onChanged(List ShopPosts) { + //postsDatasetを一旦クリアし、LiveDataから受け取ったデータを一つずつセット postsDataset.clear(); for (Post post: ShopPosts){ PostDataModel data = new PostDataModel(); data.setName(post.getName()); data.setDate(post.getDate()); + + //intで受け取った評価を対応した星の数のStringに変換 int intRate = post.getRate(); String strRate = ""; for (int i = 0; i < 5; i++){ @@ -80,33 +107,11 @@ data.setComment(post.getComment()); postsDataset.add(data); - System.out.println("hogehoge"); - - //recyclerViewをonChangedが呼ばれるたび表示 - rv.setAdapter(adapter); - } + //RecyclerViewをonChangedが呼ばれるたび表示 + adapter.setList(postsDataset); + rv.setAdapter(adapter); } }); - - - - } - - private List kariDataset() { - - //RecyclerViewの中身の仮データ - List dataset = new ArrayList<>(); - for (int i = 0; i < 50; i++) { - PostDataModel data = new PostDataModel(); - data.setName("ネモフィラ 太郎" + i + "号"); - data.setDate("yyyy/mm/dd"); - data.setRate("★★★★★"); - data.setGenre("ラーメン, 中華, おいしい, 安い"); - data.setComment("おいしかった。"); - - dataset.add(data); - } - return dataset; } } \ 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 index 8c3b5ce..d41d4ac 100644 --- a/app/src/main/java/com/example/nemophila/ShopActivityAdapter.java +++ b/app/src/main/java/com/example/nemophila/ShopActivityAdapter.java @@ -11,12 +11,18 @@ public class ShopActivityAdapter extends RecyclerView.Adapter { - public List list; + + private List list; public ShopActivityAdapter(List list) { this.list =list; } + public void setList(List list) { + this.list = list; + } + + @NonNull @Override public PostsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { 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/SignUpActivity.java b/app/src/main/java/com/example/nemophila/SignUpActivity.java index 0b1aa70..c3ab931 100644 --- a/app/src/main/java/com/example/nemophila/SignUpActivity.java +++ b/app/src/main/java/com/example/nemophila/SignUpActivity.java @@ -36,10 +36,11 @@ .build(); this.AccountsRest = retrofit.create(AccountsRest.class); - +//アカウント新規製作 findViewById(R.id.SignUpButton).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { + //Nameとpwを入力 EditText editname = (EditText) findViewById(R.id.editTextTextUserName); String name = editname.getText().toString(); EditText editpw = (EditText) findViewById(R.id.editTextTextNewPassword); @@ -73,5 +74,13 @@ }); } }); +//Login画面に遷移 + findViewById(R.id.LoginTrans).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(SignUpActivity.this,LoginActivity.class); + startActivity(intent); + } + }); } } \ 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 c38422c..85f9381 100644 --- a/app/src/main/java/com/example/nemophila/TestActivity.java +++ b/app/src/main/java/com/example/nemophila/TestActivity.java @@ -1,7 +1,6 @@ package com.example.nemophila; import androidx.appcompat.app.AppCompatActivity; -import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModelProvider; import android.os.Bundle; @@ -27,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); @@ -64,7 +63,7 @@ //accountViewModel.getAccount("1111"); break; case 2: - postsViewModel.getShopPostJson("151347fa-2c90-44d7-ba48-f23f475b910d"); + postsViewModel.loadShopPost("151347fa-2c90-44d7-ba48-f23f475b910d"); break; } } 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 fb95de5..20af87c 100644 --- a/app/src/main/java/com/example/nemophila/resources/AccountsRest.java +++ b/app/src/main/java/com/example/nemophila/resources/AccountsRest.java @@ -2,15 +2,14 @@ //import android.accounts.Account; -import com.example.nemophila.entities.Account; import com.example.nemophila.entities.AccountJson; -import com.example.nemophila.entities.Post; +import com.example.nemophila.entities.PostJson; import java.util.Collection; import java.util.HashMap; -import java.util.List; import retrofit2.Call; +import retrofit2.Response; import retrofit2.http.DELETE; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; @@ -31,7 +30,7 @@ ); @GET("accounts/{uid}") - Call getAccount( + Call getAccount( @Path("uid") String uid ); @@ -65,7 +64,7 @@ ); @GET("accounts/{uid}/posts") - Call> getAccountPosts( + Call> getAccountPosts( @Path("uid") String uid ); 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..bf4aa98 100644 --- a/app/src/main/java/com/example/nemophila/resources/PostsRest.java +++ b/app/src/main/java/com/example/nemophila/resources/PostsRest.java @@ -29,7 +29,7 @@ ); @GET("accounts/{uid}/posts") - Call> getAccountPosts( + Call> getAccountPosts( @Path("uid") String uid ); 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 56add7a..01f32f2 100644 --- a/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java +++ b/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java @@ -1,12 +1,15 @@ package com.example.nemophila.viewmodels; import com.example.nemophila.entities.Account; +import com.example.nemophila.entities.AccountJson; import com.example.nemophila.entities.Post; +import com.example.nemophila.entities.PostJson; import com.example.nemophila.resources.AccountsRest; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; +import java.util.ArrayList; import java.util.Collection; import retrofit2.Call; @@ -19,6 +22,7 @@ // フィールド private final Retrofit retrofit; private final AccountsRest accountsRest; + // ライブデータ private final MutableLiveData accountLiveData; private final MutableLiveData> accountPostsLiveData; @@ -35,30 +39,44 @@ } // ライブデータの取得(ゲッター) - public MutableLiveData getAccountLiveData() { - return accountLiveData; - } + public MutableLiveData getAccountLiveData() { return accountLiveData; } public MutableLiveData> getAccountPostsLiveData() { return accountPostsLiveData; } - // 対象のアカウント情報の取得 - public Account getAccount(String uid) { - Call call = accountsRest.getAccount(uid); + //AccountJsonからAccountを作成し,対象のライブデータに設定する + private void setAccountLiveDataFromJson(AccountJson accountJson) { + Account account = new Account(accountJson); + accountLiveData.setValue(account); + } - call.enqueue(new Callback() { + //PostJsonからPostを作成し,対象のライブデータに設定する + private void setAccountPostLiveDataFromJson(Collection postJson) { + ArrayList posts = new ArrayList<>(); + for(PostJson i: postJson) { + Post post = new Post(i); + posts.add(post); + } + accountPostsLiveData.setValue(posts); + } + + // 対象のアカウント情報の取得 + public void getAccount(String uid) { + Call call = accountsRest.getAccount(uid); + + call.enqueue(new Callback() { @Override - public void onResponse(Call call, Response response) { + public void onResponse(Call call, Response response) { if (response.isSuccessful()) { - accountLiveData.setValue(response.body()); + AccountJson accountJson = response.body(); + setAccountLiveDataFromJson(accountJson); } else { System.out.println("response error"); } } @Override - public void onFailure(Call call, Throwable t) { + public void onFailure(Call call, Throwable t) { System.out.println("correspondence error"); } }); - return null; } // 対象のアカウント情報の削除 @@ -123,19 +141,20 @@ // 対象のアカウントがした投稿の全取得 public void getAccountPosts(String uid) { - Call> call = accountsRest.getAccountPosts(uid); + Call> call = accountsRest.getAccountPosts(uid); - call.enqueue(new Callback>() { + call.enqueue(new Callback>() { @Override - public void onResponse(Call> call, Response> response) { + public void onResponse(Call> call, Response> response) { if (response.isSuccessful()) { - accountPostsLiveData.setValue(response.body()); + Collection postJson = response.body(); + setAccountPostLiveDataFromJson(postJson); } else { System.out.println("response error"); } } @Override - public void onFailure(Call> call, Throwable t) { + public void onFailure(Call> call, Throwable t) { System.out.println("correspondence error"); } }); 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 37e7985..51bd9d6 100644 --- a/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java +++ b/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java @@ -22,7 +22,6 @@ //Field final private Retrofit retrofit; final private PostsRest postsRest; - private String pid; //LiveData final private MutableLiveData> accountPostsLiveData; @@ -37,7 +36,6 @@ .addConverterFactory(JacksonConverterFactory.create()) .build(); this.postsRest = retrofit.create(PostsRest.class); - this.pid = null; } //getter @@ -48,62 +46,39 @@ return this.shopPostsLiveData; } - //API通信メソッド - public void getAccountPosts(String uid) { - Call> call = postsRest.getAccountPosts(uid); - call.enqueue(new Callback>() { + + //AccountのpostJsonを取得 + public void loadAccountPosts(String uid) { + Call> call = postsRest.getAccountPosts(uid); + call.enqueue(new Callback>() { @Override - public void onResponse(Call> call, Response> response) { + public void onResponse(Call> call, Response> response) { if (response.isSuccessful()) { - accountPostsLiveData.setValue(response.body()); + setAccountPostLiveData(response.body()); } else { - //レスポンスエラーを通知 + System.out.println("AccountPosts ResponseError"); } } @Override - public void onFailure(Call> call, Throwable t) { - //通信エラーを通知 + public void onFailure(Call> call, Throwable t) { + System.out.println("AccountPosts NetWorkError: " + t); } }); } - //投稿作成 - public String createPost(String uid, String token, String sid, - String rate, String genre, String comment, - String image1, String image2, String image3) { - Call call = postsRest.postAccountPost(uid ,token, sid, rate, genre, comment, image1, image2, image3); - - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - if (response.isSuccessful()) { - pid = response.body(); - } else { - //レスポンスエラーを通知 - } - } - - @Override - public void onFailure(Call call, Throwable t) { - //通信エラーを通知 - } - }); - return pid; - } - //PostJsonからPostを作成し,それをLiveDataにセット - private void setShopPostLiveData(ArrayList postJson) { + private void setAccountPostLiveData(Collection postJson) { ArrayList posts = new ArrayList<>(); - for(PostJson i: postJson) { - Post post = new Post(i); + for(PostJson pj: postJson) { + Post post = new Post(pj); posts.add(post); } - shopPostsLiveData.setValue(posts); + accountPostsLiveData.setValue(posts); } - //PostJsonを取得 - public void getShopPostJson(String sid) { + //ShopのPostJsonを取得 + public void loadShopPost(String sid) { Call> call = postsRest.getShopPosts(sid); call.enqueue(new Callback>() { @Override @@ -112,15 +87,45 @@ ArrayList postJson = response.body(); setShopPostLiveData(postJson); } else { - //レスポンスエラー + System.out.println("ShopPosts ResponseError"); } } @Override public void onFailure(Call> call, Throwable t) { - System.out.println("networkError"); - System.out.println(t); - //通信エラー + System.out.println("ShopPosts NetWorkError: " + t); + } + }); + } + //PostJsonからPostを作成し,それをLiveDataにセット + private void setShopPostLiveData(ArrayList postJson) { + ArrayList posts = new ArrayList<>(); + for(PostJson pj: postJson) { + Post post = new Post(pj); + posts.add(post); + } + shopPostsLiveData.setValue(posts); + } + + //投稿作成 + public void createPost(String uid, String token, String sid, + String rate, String genre, String comment, + String image1, String image2, String image3) { + Call call = postsRest.postAccountPost(uid ,token, sid, rate, genre, comment, image1, image2, image3); + + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + System.out.println("Success CreatePost" + response.body()); + } else { + System.out.println("CreatePosts ResponseError"); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("CreatePosts NetWorkError: " + t); } }); } 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..88282c9 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,20 +35,35 @@ // ライブデータ 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()) .build(); this.shopsRest = retrofit.create(ShopsRest.class); + this.ShopToMarker = new HashMap<>(); } + // ライブデータを返す 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 +109,7 @@ System.out.println("ステータスコード 不正 : setViewModel"); } } + // 通信が失敗 @Override public void onFailure(Call> call, Throwable t) { @@ -101,13 +119,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); + } + }); } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index ebbd728..1a0a7e5 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,6 +11,7 @@ android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" + android:visibility="gone" tools:context=".MainActivity" /> - + + + + diff --git a/app/src/main/res/layout/activity_post.xml b/app/src/main/res/layout/activity_post.xml index dc29d57..94ffebd 100644 --- a/app/src/main/res/layout/activity_post.xml +++ b/app/src/main/res/layout/activity_post.xml @@ -1,10 +1,66 @@ - - \ No newline at end of file + + + +