diff --git a/.idea/misc.xml b/.idea/misc.xml index 4862f2b..b3a7a61 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -18,6 +18,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6697b51..df8ac75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -24,11 +24,6 @@ android:name=".ShopCreateActivity" android:exported="true" android:label="@string/title_activity_shop_create"> - - - - - - - - + + - - + + - - + + - - + + diff --git a/app/src/main/java/com/example/nemophila/FriendActivity.java b/app/src/main/java/com/example/nemophila/FriendActivity.java index 718a01c..ad12256 100644 --- a/app/src/main/java/com/example/nemophila/FriendActivity.java +++ b/app/src/main/java/com/example/nemophila/FriendActivity.java @@ -10,5 +10,6 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_friend); + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/LoginActivity.java b/app/src/main/java/com/example/nemophila/LoginActivity.java index cd63a63..c3bdf20 100644 --- a/app/src/main/java/com/example/nemophila/LoginActivity.java +++ b/app/src/main/java/com/example/nemophila/LoginActivity.java @@ -9,7 +9,9 @@ import android.widget.TextView; import com.example.nemophila.entities.Account; +import com.example.nemophila.entities.AccountJson; import com.example.nemophila.resources.AccountsRest; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import retrofit2.Call; import retrofit2.Callback; @@ -17,15 +19,26 @@ import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; +@JsonIgnoreProperties(ignoreUnknown=true) public class LoginActivity extends AppCompatActivity { private Retrofit retrofit; private AccountsRest AccountsRest; + private Nemophila nemophila; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); + + //Nemophilaと連携 + nemophila = (Nemophila) this.getApplication(); + //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() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/nemophila/") @@ -33,42 +46,50 @@ .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); String pw = editpw.getText().toString(); // 通信 - Call call = AccountsRest.getAccounts(uid,pw); + Call call = AccountsRest.getAccounts(uid,pw); - 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()) { System.out.println("通信成功:changeBelongsAndMaster"); + + nemophila.setName(response.body().getName()); + nemophila.setUid(response.body().getId()); + nemophila.setToken(response.body().getToken()); + Intent intent = new Intent(LoginActivity.this,MainActivity.class); startActivity(intent); } else { System.out.println("通信可能:changeBelongsAndMaster: " + response.code()); if (response.code() == 500){ ((TextView) findViewById(R.id.textView)).setText("Invalid UserID or Password"); - }else if (response.code() == 404){ + } else if (response.code() == 404){ ((TextView) findViewById(R.id.textView)).setText("Login failed. Please enter the correct credentials."); } } } @Override - public void onFailure(Call call, Throwable t) { + public void onFailure(Call call, Throwable t) { System.out.println("通信失敗:changeBelongsAndMaster"); + System.out.println(t); } }); } }); +//SignUpボタンを押したとき findViewById(R.id.SignUp).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -76,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 c3769c7..e50541f 100644 --- a/app/src/main/java/com/example/nemophila/MainActivity.java +++ b/app/src/main/java/com/example/nemophila/MainActivity.java @@ -1,6 +1,5 @@ package com.example.nemophila; -import androidx.core.content.res.ResourcesCompat; import androidx.fragment.app.FragmentActivity; import androidx.activity.result.ActivityResultLauncher; @@ -8,19 +7,16 @@ import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Point; -import android.graphics.drawable.Drawable; +import android.app.ProgressDialog; import android.os.Bundle; +import android.view.View; +import android.widget.ImageButton; import android.widget.Toast; import android.annotation.SuppressLint; import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; -import android.widget.TextView; import android.content.Intent; import android.provider.Settings; import android.util.Log; @@ -28,12 +24,10 @@ import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; -import com.google.android.gms.maps.MapView; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.BitmapDescriptor; import com.google.android.gms.maps.model.BitmapDescriptorFactory; -import com.google.android.gms.maps.model.CameraPosition; import com.google.android.gms.maps.model.GroundOverlay; import com.google.android.gms.maps.model.GroundOverlayOptions; import com.google.android.gms.maps.model.LatLng; @@ -41,30 +35,46 @@ import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import com.example.nemophila.databinding.ActivityMainBinding; -import com.google.firebase.firestore.GeoPoint; - -import java.util.Map; public class MainActivity extends FragmentActivity implements OnMapReadyCallback,LocationListener { private GoogleMap mMap; private ActivityMainBinding binding; - private LatLng latlng; - private LatLng latlng2; + private LatLng currentLatlng = null; + private LatLng testLatlng; + private LatLng testLatlng2; + private LatLng initialLatlng; - private GroundOverlay current_overlay; + private GroundOverlay currentOverlay; LocationManager locationManager; - + @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()); + //現在地ボタン + ImageButton button1 = findViewById(R.id.currentButton); + // lambda式 + button1.setOnClickListener( v -> { + Log.d("debug", "currentbutton, 現在地にカメラを移動"); + //現在地にカメラを移動 + zoomMap(currentLatlng.latitude, currentLatlng.longitude); + }); + + ImageButton myPageButton = findViewById(R.id.myPageButton); + // lambda式 + myPageButton.setOnClickListener( v -> { + Log.d("debug", "myPageButton, マイページに画面遷移"); + Intent intent = new Intent(MainActivity.this, MyPageActivity.class); + startActivity(intent); + }); + + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { @@ -93,9 +103,15 @@ double latitude = 34.7308032; double longitude = 135.2630272; - //テスト用 - latlng = new LatLng(latitude, longitude); - latlng2 = new LatLng(34.74, 135.26); + //テスト用,仮ピン立て + 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); @@ -104,9 +120,6 @@ //画像関連がわかっていないのでパス //setIcon(latitude, longitude); - // camera 移動 (初期画面) - //mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, 15)); - /* //多分使わない // タップした時のリスナーをセット @@ -163,22 +176,22 @@ } - //ピンの初期設定。完成時不要 + //起動時から立っているピンの設定。完成時不要 private void setMarker(double latitude, double longitude){ MarkerOptions markerOptions = new MarkerOptions(); MarkerOptions markerOptions2 = new MarkerOptions(); - markerOptions.position(latlng); + markerOptions.position(testLatlng); markerOptions.title("ntlab"); mMap.addMarker(markerOptions); //テスト用 - markerOptions2.position(latlng2); + markerOptions2.position(testLatlng2); markerOptions2.title(null); mMap.addMarker(markerOptions2); // ズーム - zoomMap(latitude, longitude); + //zoomMap(latitude, longitude); } @@ -189,6 +202,8 @@ double north = latitude * (1+0.00005); double east = longitude * (1+0.00005); + LatLng latlng = new LatLng(latitude,longitude); + // LatLngBounds (LatLng southwest, LatLng northeast) //左下、右上 LatLngBounds bounds = LatLngBounds.builder() @@ -207,11 +222,12 @@ mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, 15f)); } + //現在地の表示 private void setIcon(double latitude, double longitude){ //Drawable ic_current = ResourcesCompat.getDrawable(getResources(),R.drawable.icon_current,null); //更新前の現在地アイコンを消去 - if(current_overlay != null) { - current_overlay.remove(); + if(currentOverlay != null) { + currentOverlay.remove(); } LatLng current_location = new LatLng(latitude,longitude); @@ -233,14 +249,14 @@ overlayOptions.position(current_location, 200f, 200f); // マップに貼り付け・アルファを設定 - current_overlay = mMap.addGroundOverlay(overlayOptions); + currentOverlay = mMap.addGroundOverlay(overlayOptions); // カメラを移動 - zoomMap(latitude, longitude); + //zoomMap(latitude, longitude); // 透明度 - assert current_overlay != null; - current_overlay.setTransparency(0.8F); + assert currentOverlay != null; + currentOverlay.setTransparency(0.8F); } @@ -299,27 +315,36 @@ @Override public void onLocationChanged(Location location) { + //初期画面は現在地を中心にするため... + if (currentLatlng == null){ + zoomMap(location.getLatitude(), location.getLongitude()); + findViewById(R.id.LL_Load).setVisibility(View.GONE); + + } + //現在地が変更されるたびに現在地アイコンを移動 - //LatLng型で一応受け取っておく - latlng = new LatLng(location.getLatitude(), location.getLongitude()); + //LatLng型で受け取っておく + currentLatlng = new LatLng(location.getLatitude(), location.getLongitude()); /* テスト用。現在座標を画面に表示 */ - // 緯度の表示 - TextView textView1 = findViewById(R.id.text_view1); - String str1 = "Latitude:"+location.getLatitude(); - textView1.setText(str1); - - // 経度の表示 - TextView textView2 = findViewById(R.id.text_view2); - String str2 = "Longitude:"+location.getLongitude(); - textView2.setText(str2); +// // 緯度の表示 +// TextView textView1 = findViewById(R.id.text_view1); +// String str1 = "Latitude:"+location.getLatitude(); +// textView1.setText(str1); +// +// // 経度の表示 +// TextView textView2 = findViewById(R.id.text_view2); +// String str2 = "Longitude:"+location.getLongitude(); +// textView2.setText(str2); //現在地アイコンを表示.このsetIcon内にzoomMap処理もあるので注意 setIcon(location.getLatitude(),location.getLongitude()); } + + @Override public void onProviderEnabled(String provider) { @@ -329,4 +354,5 @@ public void onProviderDisabled(String provider) { } + } diff --git a/app/src/main/java/com/example/nemophila/MyPageActivity.java b/app/src/main/java/com/example/nemophila/MyPageActivity.java index a2f9074..82b4397 100644 --- a/app/src/main/java/com/example/nemophila/MyPageActivity.java +++ b/app/src/main/java/com/example/nemophila/MyPageActivity.java @@ -60,9 +60,11 @@ AccountViewModel accountViewModel = new ViewModelProvider(this).get(AccountViewModel.class); Nemophila nemophila = (Nemophila) getApplication(); String uid = nemophila.getUid(); -// String name = nemophila. -// TextView name = (TextView) findViewById(R.id.name); -// TextView id = (TextView) findViewById(R.id.id); + String name = nemophila.getName(); + TextView myname = (TextView) findViewById(R.id.name); + myname.setText(name); + TextView id = (TextView) findViewById(R.id.id); + id.setText(uid); } } \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java b/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java index b9b46be..393e666 100644 --- a/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java +++ b/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java @@ -8,6 +8,7 @@ import android.view.View; import android.widget.Button; import android.widget.EditText; +import android.widget.TextView; import com.example.nemophila.viewmodels.AccountViewModel; @@ -19,6 +20,7 @@ setContentView(R.layout.activity_my_page_editor); //AccountViewModelとの通信 AccountViewModel accountViewModel = new ViewModelProvider(this).get(AccountViewModel.class); + EditText name = (EditText) findViewById(R.id.editName); //MyPageに戻るボタン Button backButton = (Button) findViewById(R.id.backMyPage); backButton.setOnClickListener(new View.OnClickListener() { @@ -54,5 +56,16 @@ startActivity(intent); } }); +// 削除ボタンを押したときの処理 + Button deleteAccountButton = (Button) findViewById(R.id.deleteAccount); + deleteAccountButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + Nemophila nemophila = (Nemophila) getApplication(); + String uid = nemophila.getUid(); + String token = nemophila.getToken(); + Intent intent = new Intent(MyPageEditorActivity.this, LoginActivity.class); + startActivity(intent); + } + }); } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/nemophila/Nemophila.java b/app/src/main/java/com/example/nemophila/Nemophila.java index 61ae16c..6b8c2be 100644 --- a/app/src/main/java/com/example/nemophila/Nemophila.java +++ b/app/src/main/java/com/example/nemophila/Nemophila.java @@ -18,21 +18,21 @@ public String getName() { if(name == null){ SharedPreferences preferences = getSharedPreferences("prefData", MODE_PRIVATE); - name = preferences.getString("name", ""); + name = preferences.getString("name", null); } return name; } public String getUid() { if(uid == null){ SharedPreferences preferences = getSharedPreferences("prefData", MODE_PRIVATE); - uid = preferences.getString("uid", ""); + uid = preferences.getString("uid", null); } return uid; } public String getToken() { if(token == null){ SharedPreferences preferences = getSharedPreferences("prefData", MODE_PRIVATE); - token = preferences.getString("token", ""); + token = preferences.getString("token", null); } return token; } 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..6aa69fa 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,22 @@ rv.setHasFixedSize(true); rv.setLayoutManager(llm); - //通信テスト + //PostViewModelを宣言し、LiveDataへの購読 PostsViewModel postsViewModel = new ViewModelProvider(this).get(PostsViewModel.class); + //通信テスト用データ(本来currentShopのsidをPostJsonに送る) postsViewModel.getShopPostJson("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 +106,14 @@ data.setComment(post.getComment()); postsDataset.add(data); - System.out.println("hogehoge"); - - //recyclerViewをonChangedが呼ばれるたび表示 - rv.setAdapter(adapter); - } + //RecyclerViewをonChangedが呼ばれるたび表示 +// ShopActivityAdapter adapter = new ShopActivityAdapter(postsDataset); + 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/SignUpActivity.java b/app/src/main/java/com/example/nemophila/SignUpActivity.java index 9a412a6..c3ab931 100644 --- a/app/src/main/java/com/example/nemophila/SignUpActivity.java +++ b/app/src/main/java/com/example/nemophila/SignUpActivity.java @@ -9,6 +9,7 @@ import android.widget.TextView; import com.example.nemophila.entities.Account; +import com.example.nemophila.entities.AccountJson; import com.example.nemophila.resources.AccountsRest; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -17,6 +18,7 @@ import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; + @JsonIgnoreProperties(ignoreUnknown=true) public class SignUpActivity extends AppCompatActivity{ @@ -34,21 +36,22 @@ .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); String pw = editpw.getText().toString(); // 通信 - Call call = AccountsRest.createAccounts(name,pw); + Call call = AccountsRest.createAccounts(name,pw); - 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()) { System.out.println("通信成功:changeBelongsAndMaster"); Intent intent = new Intent(SignUpActivity.this,MainActivity.class); @@ -64,11 +67,20 @@ } @Override - public void onFailure(Call call, Throwable t) { + public void onFailure(Call call, Throwable t) { System.out.println("通信失敗:changeBelongsAndMaster"); + System.out.println(t); } }); } }); +//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/entities/Account.java b/app/src/main/java/com/example/nemophila/entities/Account.java index 9ebbf12..e96a2ce 100644 --- a/app/src/main/java/com/example/nemophila/entities/Account.java +++ b/app/src/main/java/com/example/nemophila/entities/Account.java @@ -1,6 +1,7 @@ package com.example.nemophila.entities; import java.util.HashMap; +import java.util.Map; public class Account { private String name; @@ -43,4 +44,10 @@ public void setPosts(HashMap posts) { this.posts = posts; } + + public Account(AccountJson aj){ + this.name = aj.getName(); + this.id = aj.getId(); + this.token = aj.getToken(); + } } 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 3d57bc1..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,14 +2,14 @@ //import android.accounts.Account; -import com.example.nemophila.entities.Account; -import com.example.nemophila.entities.Post; +import com.example.nemophila.entities.AccountJson; +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; @@ -24,13 +24,13 @@ @FormUrlEncoded @POST("accounts") - Call createAccounts( + Call createAccounts( @Field("name") String name, @Field("pw") String pw ); @GET("accounts/{uid}") - Call getAccount( + Call getAccount( @Path("uid") String uid ); @@ -41,7 +41,7 @@ @FormUrlEncoded @POST("accounts/{uid}/login") - Call getAccounts( + Call getAccounts( @Path("uid") String uid, @Field("pw")String pw ); @@ -64,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 42479b7..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,26 +39,41 @@ } // ライブデータの取得(ゲッター) - public MutableLiveData getAccountLiveData() { - return accountLiveData; - } + public MutableLiveData getAccountLiveData() { return accountLiveData; } public MutableLiveData> getAccountPostsLiveData() { return accountPostsLiveData; } + //AccountJsonからAccountを作成し,対象のライブデータに設定する + private void setAccountLiveDataFromJson(AccountJson accountJson) { + Account account = new Account(accountJson); + accountLiveData.setValue(account); + } + + //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 call = accountsRest.getAccount(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()) { - 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"); } }); @@ -122,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..dd8e411 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,61 +46,38 @@ return this.shopPostsLiveData; } - //API通信メソッド + + //AccountのpostJsonを取得 public void getAccountPosts(String uid) { - Call> call = postsRest.getAccountPosts(uid); - call.enqueue(new Callback>() { + 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を取得 + //ShopのPostJsonを取得 public void getShopPostJson(String sid) { Call> call = postsRest.getShopPosts(sid); call.enqueue(new Callback>() { @@ -112,16 +87,48 @@ 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("ShopPosts NetWorkError: " + t); System.out.println(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/res/layout/activity_friend.xml b/app/src/main/res/layout/activity_friend.xml index 560f9dd..51e2fcb 100644 --- a/app/src/main/res/layout/activity_friend.xml +++ b/app/src/main/res/layout/activity_friend.xml @@ -6,4 +6,29 @@ android:layout_height="match_parent" tools:context=".FriendActivity"> + + + + +