diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index 86843cb..e58179e 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 6bb162c..31863cb 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -9,6 +9,9 @@
+
+
+
diff --git a/app/src/main/java/com/example/nemophila/MapsFragment.java b/app/src/main/java/com/example/nemophila/MapsFragment.java
index a078e85..1ee5dd6 100644
--- a/app/src/main/java/com/example/nemophila/MapsFragment.java
+++ b/app/src/main/java/com/example/nemophila/MapsFragment.java
@@ -9,6 +9,7 @@
import androidx.core.content.res.ResourcesCompat;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
+import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import android.Manifest;
@@ -29,9 +30,11 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
+import android.widget.TextView;
import android.widget.Toast;
import com.example.nemophila.databinding.ActivityMainBinding;
+import com.example.nemophila.entities.Post;
import com.example.nemophila.entities.Shop;
import com.example.nemophila.viewmodels.FriendViewModel;
import com.example.nemophila.viewmodels.PostsViewModel;
@@ -51,6 +54,7 @@
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.common.collect.Maps;
+import java.util.ArrayList;
import java.util.Map;
public class MapsFragment extends Fragment implements LocationListener {
@@ -72,7 +76,7 @@
private Marker currentMarker;
private BitmapDescriptor bd;
private boolean isLongClick;
- private
+
LocationManager locationManager;
@@ -89,7 +93,9 @@
friendViewModel = new ViewModelProvider(getActivity()).get(FriendViewModel.class);
postsViewModel = new ViewModelProvider(getActivity()).get(PostsViewModel.class);
+
//フレンドの更新が入った時の処理(LiveDataへの購読)
+ friendViewModel.getFriends(nemophila.getUid());
friendViewModel.getFriendsLiveData().observe(getActivity(), friends -> {
Toast.makeText(getActivity(),
String.format("フレンドの更新を確認しました。"),
@@ -99,6 +105,8 @@
nemophila.setFriends(friends);
});
+
+
// 店情報の更新が入った時の処理(LiveDataへの購読)
shopsViewModel.getShopsLiveData().observe(getActivity(), shops -> {
Toast.makeText(getActivity(),
@@ -108,6 +116,32 @@
for (Shop shop : shops) {
//受け取ったshopsにfriendsの投稿が含まれているかを確認,受け取ったshopsに対してMarkerが立っているかを確認
+
+ //observeの中にobserveはうまくいかなかった
+// postsViewModel.loadShopPost(shop.getSid());
+// postsViewModel.getShopPostLiveData().observe(getActivity(), new Observer >() {
+// @Override
+// public void onChanged(ArrayList posts) {
+// ArrayList ids = postsViewModel.getUserIds();
+//
+// for(int i = 0; i < ids.size(); i++) {
+// ArrayList fids = nemophila.getFriendIds();
+// for(int j = 0; j < fids.size(); j++) {
+// if( ( ids.get(i).equals(fids.get(j)) || ids.get(i).equals(nemophila.getUid()) ) && shopsViewModel.getMarker(shop) == null ){
+// //各shopに対応するMarkerがなければMarkerを立てる
+// shopLatlng = new LatLng(shop.getLatitude(), shop.getLongitude());
+// System.out.println(shopLatlng);
+// Marker createMaker = mMap.addMarker(new MarkerOptions().position(shopLatlng).title(""));
+// //マーカーに店情報を持たせる
+// createMaker.setTag(shop);
+// //ShopToMarkerに紐づけ
+// shopsViewModel.setShopAndMarker(shop, createMaker);
+// }
+// }
+// }
+// }
+// });
+
if ( shopsViewModel.getMarker(shop) == null) { //フレンド以外の投稿のピンも立てたい場合
//if( && shopsViewModel.getMarker(shop) == null) {
diff --git a/app/src/main/java/com/example/nemophila/Nemophila.java b/app/src/main/java/com/example/nemophila/Nemophila.java
index a41a04d..00a9120 100644
--- a/app/src/main/java/com/example/nemophila/Nemophila.java
+++ b/app/src/main/java/com/example/nemophila/Nemophila.java
@@ -8,6 +8,7 @@
import com.example.nemophila.entities.Shop;
import com.google.type.LatLng;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
@@ -198,4 +199,12 @@
public void removeFavoriteFriends(String favoriteFriend){
this.favoriteFriends.remove(favoriteFriend);
}
+ public ArrayList getFriendIds() {
+ ArrayList friendIds = new ArrayList<>();
+ for(AccountNameJson anj: friends) {
+ friendIds.add(anj.getUid());
+ }
+ return friendIds;
+ }
+
}
diff --git a/app/src/main/java/com/example/nemophila/PostActivity.java b/app/src/main/java/com/example/nemophila/PostActivity.java
index 6fbe3ce..69db41e 100644
--- a/app/src/main/java/com/example/nemophila/PostActivity.java
+++ b/app/src/main/java/com/example/nemophila/PostActivity.java
@@ -2,38 +2,33 @@
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
-import androidx.activity.result.contract.ActivityResultContract;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
-import android.app.Activity;
import android.content.Intent;
-import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
-import android.provider.MediaStore;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import com.example.nemophila.entities.Account;
-import com.example.nemophila.entities.Post;
import com.example.nemophila.entities.Shop;
-import com.example.nemophila.resources.ShopsRest;
import com.example.nemophila.viewmodels.PostsViewModel;
import com.example.nemophila.viewmodels.ShopsViewModel;
import com.google.android.material.snackbar.Snackbar;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
import java.util.List;
import retrofit2.Retrofit;
@@ -48,24 +43,50 @@
private String comment;
private String token;
private String sid;
- private String img1 = null;
- private String img2 = null;
- private String img3 = null;
+ private String[] img;
private String shopName;
+ private ImageButton[] deleteButtons;
+ private ImageView[] postImages;
+ private List uriLists;
private PostsViewModel postsViewModel;
private ShopsViewModel shopsViewModel;
- private Account account;
- private Retrofit retrofit;
private Nemophila nemophila;
- private ActivityResultLauncher launcher = registerForActivityResult(new ActivityResultContracts.GetContent(),
- new ActivityResultCallback() {
- @Override
- public void onActivityResult(Uri result) {
+ //画像挿入
+ private ActivityResultLauncher launcher = registerForActivityResult(new ActivityResultContracts.OpenMultipleDocuments(), new ActivityResultCallback>() {
+ @Override
+ public void onActivityResult(List uriList) {
+ uriLists = uriList;
- }
- });
+ postImages[0] = findViewById(R.id.imageView1);
+ postImages[1] = findViewById(R.id.imageView2);
+ postImages[2] = findViewById(R.id.imageView3);
+
+ System.out.println(uriLists.get(0));
+
+// for (int i = 0; i () {
@Override
public void onChanged(Shop shop) {
System.out.println("店舗新規作成完了");
- postsViewModel.createPost(uid, token, shop.getSid(), rate, genre, comment, img1, img2, img3);
+ postsViewModel.createPost(uid, token, shop.getSid(), rate, genre, comment, img[0], img[1], img[2]);
System.out.println("lat" + nemophila.getCurrentLatitude() + "\nlong" + nemophila.getCurrentLongitude());
@@ -144,11 +169,11 @@
//プルダウンが変更されたら実行
rateSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
- //選択が何もなかった時の動作
+ //レートプルダウンで選択が何もなかった時の動作
@Override
public void onNothingSelected(AdapterView> adapterView) {}
- //何か選択された時の動作
+ //レートプルダウンで何か選択された時の動作
@Override
public void onItemSelected(AdapterView> adapterView, View view, int i, long l) {
String gettedRate = (String)rateSpinner.getSelectedItem();
@@ -175,46 +200,136 @@
}
});
+ ArrayAdapter genreAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item);
+ genreAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- //製作途中
+ genreAdapter.add("ジャンルを選択");
+ genreAdapter.add("中華");
+ genreAdapter.add("和食");
+ genreAdapter.add("イタリアン");
+ genreAdapter.add("フレンチ");
+ genreAdapter.add("カフェ");
+ genreAdapter.add("バー");
+ genreAdapter.add("居酒屋");
+ genreAdapter.add("ラーメン");
+ genreAdapter.add("うどん・そば");
+ genreAdapter.add("その他 海外料理");
+ genreAdapter.add("その他 和食");
+ genreAdapter.add("その他");
+ Spinner genreSpinner = (Spinner) findViewById(R.id.inputGenre);
+ genreSpinner.setAdapter(genreAdapter);
- Button selectPictureButton = (Button)findViewById(R.id.selectpicturebutton);
- selectPictureButton.setOnClickListener(new View.OnClickListener(){
- public void onClick(View v) {
-// 画像選択(3枚)
- launcher.launch("image/*");
+ genreSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+
+ //ジャンルプルダウンで選択が何もなかった時の動作
+ @Override
+ public void onNothingSelected(AdapterView> adapterView) {}
+
+ //ジャンルプルダウンで何か選択された時の動作
+ @Override
+ public void onItemSelected(AdapterView> adapterView, View view, int i, long l) {
+ genre = (String) genreSpinner.getSelectedItem();
+ if (genre.equals("ジャンルを選択")){
+ genre = null;
+ }
}
});
+
+ //製作途中
+
+ Button selectPictureButton = (Button)findViewById(R.id.selectpicturebutton);
+ selectPictureButton.setOnClickListener(new View.OnClickListener(){
+ public void onClick(View v) {
+// 画像選択(3枚)
+ launcher.launch(new String[]{"image/*"});
+ }
+ });
+
+// 写真の削除ボタン
+
+
+ deleteButtons[0]= (ImageButton) findViewById(R.id.deleteButton1);
+ deleteButtons[1]= (ImageButton) findViewById(R.id.deleteButton2);
+ deleteButtons[2]= (ImageButton) findViewById(R.id.deleteButton3);
+
+ deleteButtons[0].setVisibility(View.INVISIBLE);
+ deleteButtons[1].setVisibility(View.INVISIBLE);
+ deleteButtons[2].setVisibility(View.INVISIBLE);
+
+ deleteButtons[0].setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ postImages[0].setImageURI(null);
+ uriLists.set(0, null);
+// uriLists.remove(1);
+ System.out.println("削除ボタン1");
+ for (int i = 0; i < postImages.length-1; i++){
+ postImages[i].setImageURI(uriLists.get(i+1));
+// postImages[i].setImageURI(uriList.get(i));
+ postImages[i+1].setImageURI(null);
+// uriLists.remove(i);
+ uriLists.set(i+1, null);
+// postImages[i+1] = null;
+ System.out.println(uriLists.get(i));
+ if (uriLists.get(i) == null){
+ deleteButtons[i].setVisibility(View.INVISIBLE);
+ }
+ }
+ }
+ });
+
+ deleteButtons[1].setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ postImages[1].setImageURI(null);
+ uriLists.set(1, null);
+// postImages[1] = null;
+ System.out.println("削除ボタン2");
+ for (int i = 1; i < postImages.length-1; i++){
+ postImages[i].setImageURI(uriLists.get(i+1));
+ postImages[i+1].setImageURI(null);
+// postImages[i+1] = null;
+ if (uriLists.get(i)==null){
+ deleteButtons[i].setVisibility(View.INVISIBLE);
+ }
+ }
+ }
+ });
+
+ deleteButtons[2].setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ postImages[2].setImageURI(null);
+
+ System.out.println("削除ボタン3");
+ deleteButtons[2].setVisibility(View.INVISIBLE);
+ }
+ });
+
//投稿ボタンの処理
Button postButton = (Button)findViewById(R.id.postButton);
postButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
System.out.println("投稿ボタンのクリック");
- EditText editGenre = (EditText) findViewById(R.id.inputGenre);
- genre = editGenre.getText().toString();
+// EditText editGenre = (EditText) findViewById(R.id.inputGenre);
+// genre = editGenre.getText().toString();
EditText editComment = (EditText) findViewById(R.id.inputComment);
comment = editComment.getText().toString();
//評価が未入力の時
- if(rate == 0) {
- System.out.println("評価未設定クリック");
- Snackbar.make(v, "評価を入力してください", Snackbar.LENGTH_SHORT).show();
-// Intent intent = new Intent(getApplication(), ShopActivity.class);
-// startActivity(intent);
- } else {
- //評価入力済の時
-
+ if(rate != 0 && genre != null) {
+ //評価とジャンル入力済の時
if (shop == null) {
shopsViewModel.createShop(shopName, nemophila.getCurrentLongitude(), nemophila.getCurrentLatitude());
} else {
- postsViewModel.createPost(uid, token, sid, rate, genre, comment, img1, img2, img3);
+ postsViewModel.createPost(uid, token, sid, rate, genre, comment, img[0], img[1], img[2]);
System.out.println("既存店舗に投稿");
System.out.println("lat" + nemophila.getCurrentLatitude() + "\nlong" + nemophila.getCurrentLongitude());
@@ -225,7 +340,16 @@
Intent intent = new Intent(getApplication(), MapsActivity.class);
startActivity(intent);
}
- }
+ }else if(rate == 0) {
+ //評価未入力
+ System.out.println("評価未設定クリック");
+ Snackbar.make(v, "評価を選択してください", Snackbar.LENGTH_SHORT).show();
+// Intent intent = new Intent(getApplication(), ShopActivity.class);
+// startActivity(intent);
+ }else if (genre == null){
+ System.out.println("ジャンル未設定クリック");
+ Snackbar.make(v, "ジャンルを選択してください", Snackbar.LENGTH_SHORT).show();
+ }
}
});
diff --git a/app/src/main/java/com/example/nemophila/RequestingActivity.java b/app/src/main/java/com/example/nemophila/RequestingActivity.java
index eda2628..78a3ec8 100644
--- a/app/src/main/java/com/example/nemophila/RequestingActivity.java
+++ b/app/src/main/java/com/example/nemophila/RequestingActivity.java
@@ -23,6 +23,7 @@
import com.example.nemophila.entities.Account;
import com.example.nemophila.entities.AccountNameJson;
+import com.example.nemophila.entities.ErrorType;
import com.example.nemophila.entities.Post;
import com.example.nemophila.viewmodels.AccountViewModel;
import com.example.nemophila.viewmodels.FriendViewModel;
@@ -64,48 +65,64 @@
//フレンド検索ボタン
Button requestingButton = (Button)findViewById(R.id.requestingSearchButton);
requestingButton.setOnClickListener(new View.OnClickListener(){
+
@Override
public void onClick(View v){
//入力されたIDを取得
EditText editSearchId = (EditText) findViewById(R.id.inputRequestingId);
searchingId = editSearchId.getText().toString();
-
- //IDが存在しなければ落ちるのでその処理を書く
- //取得したIDからアカウントを読み込んでおく
+ //取得したIDからアカウントを読み込み、検索用LiveDataのonChangeへ
accountViewModel.fetchAccount(searchingId);
- //検索用LiveDataへの購読
- accountViewModel.getAccountLiveData().observe(RequestingActivity.this, new Observer() {
-
- //ViewModelからアカウントが返ってくれば(データ変更があれば)実行
- @Override
- public void onChanged(Account user) {
- if(user == null){
- new AlertDialog.Builder(RequestingActivity.this)
- .setTitle("IDが間違っています")
- .setPositiveButton("OK", null)
- .create()
- .show();
- }else {
- requestingName = (user.getName());
-
-// //申請を送るダイアログ
-//// RequestingDialogFragment dialog = new RequestingDialogFragment();
-// //名前を渡す
-// Bundle args = new Bundle();
-// args.putString("message", requestingName);
-// dialog.setArguments(args);
-//
-// //ダイアログの表示
-// dialog.show(getSupportFragmentManager(), "Requesting_dialog");
-// //OK押したら申請するメソッドにuid、requestingId、tokenを渡す
- }
- }
- });
}
-
-
});
+ //検索用LiveDataへの購読
+ accountViewModel.getAccountLiveData().observe(RequestingActivity.this, new Observer() {
+
+ //ViewModelから検索結果が返ってくれば(データ変更があれば)実行
+ @Override
+ public void onChanged(Account user) {
+
+ if (user == null) {
+ new AlertDialog.Builder(RequestingActivity.this)
+ .setTitle("IDが間違っています")
+ .setPositiveButton("OK", null)
+ .create()
+ .show();
+ } else {
+ requestingName = (user.getName());
+
+ //申請を送るダイアログ
+ RequestingDialogFragment dialog = new RequestingDialogFragment(RequestingActivity.this);
+ //名前を渡す
+ Bundle args = new Bundle();
+ args.putString("message", requestingName);
+ dialog.setArguments(args);
+
+ //ダイアログの表示
+ dialog.show(getSupportFragmentManager(), "Requesting_dialog");
+ //OK押したら申請するメソッドにuid、requestingId、tokenを渡す
+ }
+ }
+ });
+
+ //FriendViewModelの初期化
+ friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class);
+
+ //エラーコードを購読
+ friendViewModel.getErrorLiveData().observe(RequestingActivity.this, new Observer() {
+ @Override
+ public void onChanged(String error) {
+
+ if (error == ErrorType.ResponseError.getText()) {
+ new AlertDialog.Builder(RequestingActivity.this)
+ .setTitle("既にフレンド、申請を受けているなどの理由で申請できません")
+ .setPositiveButton("OK", null)
+ .create()
+ .show();
+ }
+ }
+ });
//RecyclerView(表示の設定、直接表示するところはLivedataを購読しているonChanged内に)
List requestingDataList = new ArrayList<>();
@@ -156,13 +173,16 @@
requestingDataList.clear();
//受け取ったLivedataの要素分繰り返し、セット
for (AccountNameJson user: requestingUsers) {
- //dataを宣言 dataに投稿の必要なデータをセットし、それをpostsDatasetに追加してリストを作る
+ //申請先1人に必要な情報をセットするdataを宣言
RequestingDataModel data = new RequestingDataModel();
+ //dataをpostsDatasetに追加してリストを作る
data.setName(user.getName());
data.setId(user.getUid());
- //投稿一つの情報がdataに全部セットされたらDatasetに追加
- requestingDataList.add(data);
+ //申請先一つの情報がdataに全部セットされたらDatasetに追加 重複していたら追加しない
+ if(!(requestingDataList.contains(data))) {
+ requestingDataList.add(0, data);
+ }
}
//onChange内に書くべき表示部分
diff --git a/app/src/main/java/com/example/nemophila/ShopActivity.java b/app/src/main/java/com/example/nemophila/ShopActivity.java
index 6a0e6fa..d02d414 100644
--- a/app/src/main/java/com/example/nemophila/ShopActivity.java
+++ b/app/src/main/java/com/example/nemophila/ShopActivity.java
@@ -19,11 +19,13 @@
import android.widget.TextView;
import com.example.nemophila.entities.Account;
+import com.example.nemophila.entities.AccountNameJson;
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.Collection;
import java.util.HashSet;
import java.util.List;
@@ -38,6 +40,7 @@
Shop shop;
String shopName;
String sid;
+ String myUid = ((Nemophila)getApplication()).getUid();
//NemophilaからcurrentShopを取得、店名の表示
shop = ((Nemophila)getApplication()).getCurrentShop();
@@ -64,6 +67,9 @@
}
});
+ //フレンドを取得
+ Collection friends = ((Nemophila)getApplication()).getFriends();
+
//RecyclerViewに表示する中身を格納するリストを宣言
List postsDataset = new ArrayList<>();
@@ -72,7 +78,7 @@
RecyclerView rv = (RecyclerView) findViewById(R.id.postsList);
adapter = new ShopAcAdapter(postsDataset);
- //一行ずつを縦に(LinearLayout)表示するLayoutManagerを宣言
+ //一行ずつを縦に(LinearLayout)表示するLayoutManagerを宣言 第三引数のtrueで降順に表示
LinearLayoutManager llm = new LinearLayoutManager(this);
//
RecyclerView.ItemDecoration itemDecoration =
@@ -108,6 +114,8 @@
//postsDatasetを一旦クリアし、LiveDataから受け取ったデータを一つずつセット(重複しないように)
postsDataset.clear();
+ int postViewFrag;
+
for (Post post: ShopPosts){
//dataを宣言 dataに投稿の必要なデータをセットし、それをpostsDatasetに追加してリストを作る
ShopAcDataModel data = new ShopAcDataModel();
@@ -116,27 +124,43 @@
String uid = post.getUid();
String name = post.getName();
- //選択が何もない場合は全ての投稿を、選択がある場合は一致する投稿をdataにセット
- if(selectingGenre.isEmpty() || selectingGenre.contains(genre)) {
- if(selectingFriend.isEmpty() || selectingFriend.contains(uid)) {
- data.setName(name);
- data.setDate(post.getDate());
- //rateはintで受け取った評価に対応した星の数のStringに変換してセット
- int intRate = post.getRate();
- String strRate = "";
- for (int i = 0; i < 5; i++) {
- if (intRate > i) {
- strRate += "★";
- } else {
- strRate += "☆";
- }
+ //投稿が自分もしくはフレンドのものかチェック
+ postViewFrag = 0;
+ if(uid.equals(myUid)) {
+ postViewFrag = 1;
+ }else {
+ for (AccountNameJson friendNJ : friends) {
+ if (uid.equals(friendNJ.getUid())) {
+ postViewFrag = 1;
}
- data.setRate(strRate);
- data.setGenre(genre);
- data.setComment(post.getComment());
+ }
+ }
- //投稿一つの情報がdataに全部セットされたらDatasetに追加
- postsDataset.add(data);
+ //表示する投稿のみdataにセット
+ if(postViewFrag == 1) {
+// if(friends.contains(uid)){
+ //選択が何もない場合は全ての投稿を、選択がある場合は一致する投稿をdataにセット
+ if (selectingGenre.isEmpty() || selectingGenre.contains(genre)) {
+ if (selectingFriend.isEmpty() || selectingFriend.contains(uid)) {
+ data.setName(name);
+ data.setDate(post.getDate());
+ //rateはintで受け取った評価に対応した星の数のStringに変換してセット
+ int intRate = post.getRate();
+ String strRate = "";
+ for (int i = 0; i < 5; i++) {
+ if (intRate > i) {
+ strRate += "★";
+ } else {
+ strRate += "☆";
+ }
+ }
+ data.setRate(strRate);
+ data.setGenre(genre);
+ data.setComment(post.getComment());
+
+ //投稿一つの情報がdataに全部セットされたらDatasetに追加
+ postsDataset.add(0, data);
+ }
}
}
//フレンド名を表示用HashSetにセット
diff --git a/app/src/main/java/com/example/nemophila/TestActivity.java b/app/src/main/java/com/example/nemophila/TestActivity.java
index 3ff993a..c9734de 100644
--- a/app/src/main/java/com/example/nemophila/TestActivity.java
+++ b/app/src/main/java/com/example/nemophila/TestActivity.java
@@ -3,12 +3,15 @@
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
+import android.content.Intent;
+import android.net.Uri;
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.ImageView;
import android.widget.Spinner;
import com.example.nemophila.viewmodels.AccountViewModel;
@@ -16,6 +19,8 @@
import com.example.nemophila.viewmodels.PostsViewModel;
import com.example.nemophila.viewmodels.ShopsViewModel;
+import java.util.Base64;
+
public class TestActivity extends AppCompatActivity {
int position;
@@ -62,7 +67,13 @@
// shopsViewModel.start(500, nemophila);
break;
case 1:
- accountViewModel.getAccountPosts("1111");
+ //accountViewModel.getAccountPosts("1111");
+ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+ String s = "Y29udGVudDovL2NvbS5hbmRyb2lkLnByb3ZpZGVycy5tZWRpYS5kb2N1bWVudHMvZG9jdW1lbnQvaW1hZ2UlM0EzNA==";
+ s = new String(Base64.getDecoder().decode(s));
+ Uri uri = Uri.parse(s);
+ ImageView imageView = findViewById(R.id.imageView4);
+ imageView.setImageURI(uri);
break;
case 2:
postsViewModel.createPost("1114", "dbfd3740-8dcc-4b9c-b3b0-42c908da1c65", "151347fa-2c90-44d7-ba48-f23f475b910d", 1,
diff --git a/app/src/main/java/com/example/nemophila/entities/ErrorType.java b/app/src/main/java/com/example/nemophila/entities/ErrorType.java
new file mode 100644
index 0000000..4ab24d7
--- /dev/null
+++ b/app/src/main/java/com/example/nemophila/entities/ErrorType.java
@@ -0,0 +1,19 @@
+package com.example.nemophila.entities;
+
+public enum ErrorType {
+ ResponseError("レスポンスエラー"),
+ NetworkError("ネットワークエラー"),
+ InvalidToken("トークンが不一致"),
+ UnknownError("不明なエラー"),
+ ResponseNoyFound("リソースが見つかりません");
+
+ private final String text;
+
+ ErrorType(String text) {
+ this.text = text;
+ }
+
+ public String getText() {
+ return text;
+ }
+}
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 300fbe7..207f837 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java
@@ -7,6 +7,7 @@
import com.example.nemophila.entities.Account;
import com.example.nemophila.entities.AccountJson;
import com.example.nemophila.entities.AccountNameJson;
+import com.example.nemophila.entities.ErrorType;
import com.example.nemophila.entities.Post;
import com.example.nemophila.entities.PostJson;
import com.example.nemophila.resources.AccountsRest;
@@ -35,6 +36,7 @@
private final MutableLiveData> accountPostsLiveData;
private final MutableLiveData pwErrorLiveData;
private final MutableLiveData accountLiveData;
+ private final MutableLiveData errorLiveData;
// コンストラクタ
public AccountViewModel() {
@@ -48,6 +50,7 @@
this.accountPostsLiveData = new MutableLiveData<>();
this.pwErrorLiveData = new MutableLiveData<>();
this.accountLiveData = new MutableLiveData<>();
+ this.errorLiveData = new MutableLiveData<>();
}
// ライブデータの取得(ゲッター)
@@ -64,6 +67,9 @@
public MutableLiveData getAccountLiveData() {
return accountLiveData;
}
+ public MutableLiveData getErrorLiveData() {
+ return errorLiveData;
+ }
// 対象のアカウント情報の削除
public void deleteAccount(String uid, String token) {
@@ -242,4 +248,17 @@
}
accountPostsLiveData.setValue(preData);
}
+
+ private String parseStatusCode(Integer stats) {
+ switch (stats) {
+ case 404:
+ return ErrorType.ResponseNoyFound.getText();
+ case 401:
+ return ErrorType.InvalidToken.getText();
+ case 400:
+ return ErrorType.ResponseError.getText();
+ default:
+ return ErrorType.UnknownError.getText();
+ }
+ }
}
diff --git a/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java b/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java
index 83c6596..8f3dc95 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java
@@ -4,6 +4,7 @@
import androidx.lifecycle.ViewModel;
import com.example.nemophila.entities.AccountNameJson;
+import com.example.nemophila.entities.ErrorType;
import com.example.nemophila.entities.Post;
import com.example.nemophila.entities.PostJson;
import com.example.nemophila.resources.AccountsRest;
@@ -26,6 +27,7 @@
private final MutableLiveData> friendsLiveData;
private final MutableLiveData> requestedLiveData;
private final MutableLiveData> requestingLiveData;
+ private final MutableLiveData errorLiveData;
// コンストラクタ
public FriendViewModel() {
@@ -37,6 +39,7 @@
this.friendsLiveData = new MutableLiveData<>();
this.requestedLiveData = new MutableLiveData<>();
this.requestingLiveData = new MutableLiveData<>();
+ this.errorLiveData = new MutableLiveData<>();
}
// ライブデータの取得(ゲッター)
@@ -47,6 +50,9 @@
return requestedLiveData;
}
public MutableLiveData> getRequestingLiveData() { return requestingLiveData; }
+ public MutableLiveData getErrorLiveData() {
+ return errorLiveData;
+ }
//フレンドの情報の取得
@@ -60,11 +66,13 @@
friendsLiveData.setValue(response.body());
} else {
System.out.println("ResponseError: " + response.code());
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call> call, Throwable t) {
System.out.println(" NetworkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -79,11 +87,13 @@
System.out.println("Successful");
} else {
System.out.println("ResponseError: " + response.code());
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call call, Throwable t) {
System.out.println(" NetworkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -98,11 +108,13 @@
System.out.println("Successful");
} else {
System.out.println("ResponseError: " + response.code());
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call call, Throwable t) {
System.out.println(" NetworkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -117,11 +129,13 @@
System.out.println("Successful");
} else {
System.out.println("ResponseError: " + response.code());
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call> call, Throwable t) {
System.out.println(" NetworkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -136,11 +150,13 @@
addRequestingLiveData(requesting_id, name);
} else {
System.out.println("ResponseError: " + response.code());
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call call, Throwable t) {
System.out.println(" NetworkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -155,11 +171,13 @@
System.out.println("Successful Delete");
} else {
System.out.println("ResponseError: " + response.code());
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call call, Throwable t) {
System.out.println(" NetworkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -175,11 +193,13 @@
requestedLiveData.setValue(accountNameJson);
} else {
System.out.println("ResponseError: " + response.code());
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call> call, Throwable t) {
System.out.println(" NetworkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -194,11 +214,13 @@
removeRequestedLiveData(fid);
} else {
System.out.println("ResponseError: " + response.code());
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call call, Throwable t) {
System.out.println(" NetworkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -216,7 +238,7 @@
preData.add(anj);
}
preData.add(createAccountNameJson(uid, name));
- requestedLiveData.setValue(preData);
+ requestingLiveData.setValue(preData);
}
private void removeFriendLiveData(String id) {
@@ -251,4 +273,17 @@
}
requestedLiveData.setValue(preData);
}
+
+ private String parseStatusCode(Integer stats) {
+ switch (stats) {
+ case 404:
+ return ErrorType.ResponseNoyFound.getText();
+ case 401:
+ return ErrorType.InvalidToken.getText();
+ case 400:
+ return ErrorType.ResponseError.getText();
+ default:
+ return ErrorType.UnknownError.getText();
+ }
+ }
}
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 2985f6a..9229454 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java
@@ -4,6 +4,7 @@
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
+import com.example.nemophila.entities.ErrorType;
import com.example.nemophila.entities.Post;
import com.example.nemophila.entities.PostJson;
import com.example.nemophila.resources.PostsRest;
@@ -26,6 +27,7 @@
//LiveData
final private MutableLiveData> accountPostsLiveData;
final private MutableLiveData> shopPostsLiveData;
+ private final MutableLiveData errorLiveData;
//コンストラクタ
public PostsViewModel() {
@@ -36,6 +38,7 @@
.addConverterFactory(JacksonConverterFactory.create())
.build();
this.postsRest = retrofit.create(PostsRest.class);
+ this.errorLiveData = new MutableLiveData<>();
}
//getter
@@ -45,6 +48,9 @@
public LiveData> getShopPostLiveData() {
return this.shopPostsLiveData;
}
+ public MutableLiveData getErrorLiveData() {
+ return errorLiveData;
+ }
//AccountのpostJsonを取得
@@ -57,12 +63,14 @@
setAccountPostLiveData(response.body());
} else {
System.out.println("AccountPosts ResponseError");
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call> call, Throwable t) {
System.out.println("AccountPosts NetWorkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -88,12 +96,14 @@
setShopPostLiveData(postJson);
} else {
System.out.println("ShopPosts ResponseError");
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call> call, Throwable t) {
System.out.println("ShopPosts NetWorkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -120,12 +130,14 @@
System.out.println("Success CreatePost" + response.body());
} else {
System.out.println("CreatePosts ResponseError");
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call call, Throwable t) {
System.out.println("CreatePosts NetWorkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -137,4 +149,17 @@
}
return ids;
}
+
+ private String parseStatusCode(Integer stats) {
+ switch (stats) {
+ case 404:
+ return ErrorType.ResponseNoyFound.getText();
+ case 401:
+ return ErrorType.InvalidToken.getText();
+ case 400:
+ return ErrorType.ResponseError.getText();
+ default:
+ return ErrorType.UnknownError.getText();
+ }
+ }
}
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 c31459d..da09614 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java
@@ -4,6 +4,7 @@
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
+import com.example.nemophila.entities.ErrorType;
import com.example.nemophila.entities.Shop;
import com.example.nemophila.resources.ShopsRest;
import com.google.android.gms.maps.model.Marker;
@@ -37,6 +38,7 @@
final private MutableLiveData> shopsLiveData;
final private MutableLiveData> nearShopsLiveData;
final private MutableLiveData currentShopLiveData;
+ private final MutableLiveData errorLiveData;
// コンストラクタ
public ShopsViewModel() {
@@ -49,6 +51,7 @@
.build();
this.shopsRest = retrofit.create(ShopsRest.class);
this.ShopToMarker = new HashMap<>();
+ this.errorLiveData = new MutableLiveData<>();
}
// ライブデータを返す
@@ -59,6 +62,9 @@
public LiveData getCurrentLiveData() {
return this.currentShopLiveData;
}
+ public MutableLiveData getErrorLiveData() {
+ return errorLiveData;
+ }
// ShopToMarkerに新しく店と地図上のピンを紐づける
public void setShopAndMarker(Shop shop, Marker marker) {
@@ -173,4 +179,17 @@
}
});
}
+
+ private String parseStatusCode(Integer stats) {
+ switch (stats) {
+ case 404:
+ return ErrorType.ResponseNoyFound.getText();
+ case 401:
+ return ErrorType.InvalidToken.getText();
+ case 400:
+ return ErrorType.ResponseError.getText();
+ default:
+ return ErrorType.UnknownError.getText();
+ }
+ }
}
diff --git a/app/src/main/res/layout/activity_mypage.xml b/app/src/main/res/layout/activity_mypage.xml
index 5ba4e04..666129e 100644
--- a/app/src/main/res/layout/activity_mypage.xml
+++ b/app/src/main/res/layout/activity_mypage.xml
@@ -117,6 +117,22 @@
app:layout_constraintTop_toBottomOf="@+id/requesting"
app:layout_constraintVertical_bias="0" />
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_test.xml b/app/src/main/res/layout/activity_test.xml
index 6dc8dde..c119366 100644
--- a/app/src/main/res/layout/activity_test.xml
+++ b/app/src/main/res/layout/activity_test.xml
@@ -26,4 +26,14 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.149" />
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_my_page_activity_posts.xml b/app/src/main/res/layout/layout_my_page_activity_posts.xml
index 769dde2..f682c29 100644
--- a/app/src/main/res/layout/layout_my_page_activity_posts.xml
+++ b/app/src/main/res/layout/layout_my_page_activity_posts.xml
@@ -8,12 +8,6 @@
android:layout_marginBottom="10dp"
android:orientation="vertical">
-
-
@@ -92,4 +86,15 @@
android:hint="No Comment"
android:textSize="20sp" />
+
+
+
+
\ No newline at end of file