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/app/src/main/java/com/example/nemophila/PostActivity.java b/app/src/main/java/com/example/nemophila/PostActivity.java
index 36f7a4b..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());
@@ -220,12 +245,70 @@
selectPictureButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
// 画像選択(3枚)
- launcher.launch("image/*");
+ 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);
@@ -246,7 +329,7 @@
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());
diff --git a/app/src/main/java/com/example/nemophila/RequestingActivity.java b/app/src/main/java/com/example/nemophila/RequestingActivity.java
index 763a39b..78a3ec8 100644
--- a/app/src/main/java/com/example/nemophila/RequestingActivity.java
+++ b/app/src/main/java/com/example/nemophila/RequestingActivity.java
@@ -65,63 +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();
-
- //エラーコードを購読
- 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();
- }
- }
- });
-
- //取得した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を渡す
- }
- }
- });
-
- } //onClick終わり
-
+ }
});
+ //検索用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<>();
@@ -172,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(0, data);
+ //申請先一つの情報がdataに全部セットされたらDatasetに追加 重複していたら追加しない
+ if(!(requestingDataList.contains(data))) {
+ requestingDataList.add(0, data);
+ }
}
//onChange内に書くべき表示部分
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/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 6a5f9f7..8f3dc95 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java
@@ -238,7 +238,7 @@
preData.add(anj);
}
preData.add(createAccountNameJson(uid, name));
- requestedLiveData.setValue(preData);
+ requestingLiveData.setValue(preData);
}
private void removeFriendLiveData(String id) {
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_post.xml b/app/src/main/res/layout/activity_post.xml
index 5bf628c..2e6fd2c 100644
--- a/app/src/main/res/layout/activity_post.xml
+++ b/app/src/main/res/layout/activity_post.xml
@@ -6,6 +6,7 @@
android:layout_height="match_parent"
tools:context=".PostActivity">
+
+
+
+
+
+
+
+
+
\ 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