diff --git a/app/src/main/java/com/example/sprout/refactor/model/RegistrationModel.java b/app/src/main/java/com/example/sprout/refactor/model/RegistrationModel.java index 94b0db1..b235665 100644 --- a/app/src/main/java/com/example/sprout/refactor/model/RegistrationModel.java +++ b/app/src/main/java/com/example/sprout/refactor/model/RegistrationModel.java @@ -14,7 +14,6 @@ */ public class RegistrationModel { - private BehaviorSubject accountSubject = BehaviorSubject.create(); private PublishSubject errorSubject = PublishSubject.create(); private RegistrationRepository registrationRepository = null; @@ -31,21 +30,21 @@ error -> errorSubject.onNext(error) ); } - - public void get(int userId) { - registrationRepository.getAccount(userId) - .subscribeOn(Schedulers.computation()) - .subscribe( - account -> accountSubject.onNext(account), - error -> { - if (accountSubject.getValue() != null) { - accountSubject.onNext(accountSubject.getValue()); - } - errorSubject.onNext(error); - - } - ); - } +// +// public void get(int userId) { +// registrationRepository.getAccount(userId) +// .subscribeOn(Schedulers.computation()) +// .subscribe( +// account -> accountSubject.onNext(account), +// error -> { +// if (accountSubject.getValue() != null) { +// accountSubject.onNext(accountSubject.getValue()); +// } +// errorSubject.onNext(error); +// +// } +// ); +// } public Observable getAccountObservable() { return accountSubject.hide(); diff --git a/app/src/main/java/com/example/sprout/refactor/model/RoomResponseModel.java b/app/src/main/java/com/example/sprout/refactor/model/RoomResponseModel.java index 4526041..6ee33a0 100644 --- a/app/src/main/java/com/example/sprout/refactor/model/RoomResponseModel.java +++ b/app/src/main/java/com/example/sprout/refactor/model/RoomResponseModel.java @@ -1,7 +1,9 @@ package com.example.sprout.refactor.model; +import com.example.sprout.refactor.model.entity.Error; import com.example.sprout.refactor.model.entity.RoomResponse; import com.example.sprout.refactor.repository.RoomRepository; +import com.example.sprout.refactor.util.PreferenceUtil; import io.reactivex.Observable; import io.reactivex.schedulers.Schedulers; @@ -12,8 +14,10 @@ */ public class RoomResponseModel { private PublishSubject roomResopnseSubject = PublishSubject.create(); - private PublishSubject errorSubject = PublishSubject.create(); + private PublishSubject errorSubject = PublishSubject.create(); private RoomRepository roomRepository = null; + private PreferenceUtil preferenceUtil = PreferenceUtil.getInstance(); + public RoomResponseModel(RoomRepository roomRepository) { this.roomRepository = roomRepository; @@ -25,13 +29,13 @@ .subscribe( roomResponse -> { if (roomResponse.canEnter()) { + preferenceUtil.saveInt(PreferenceUtil.Key.ROOM_ID, roomResponse.getRoom().getRoomId()); + preferenceUtil.saveInt(PreferenceUtil.Key.MEMBER_ID, roomResponse.getMemberId()); roomResopnseSubject.onNext(roomResponse); - } else { - errorSubject.onNext(new Throwable("capacityOver")); } }, error -> { - errorSubject.onNext(error); + errorSubject.onNext(new Error(error)); } ); } @@ -44,7 +48,7 @@ this.roomResopnseSubject.onNext(roomResponse); }, error -> { - errorSubject.onNext(error); + errorSubject.onNext(new Error(error)); } ); } @@ -53,7 +57,7 @@ return roomResopnseSubject.hide(); } - public Observable getErrorObservable() { + public Observable getErrorObservable() { return errorSubject.hide(); } } diff --git a/app/src/main/java/com/example/sprout/refactor/model/RoomsModel.java b/app/src/main/java/com/example/sprout/refactor/model/RoomsModel.java index 21155a2..0c44295 100644 --- a/app/src/main/java/com/example/sprout/refactor/model/RoomsModel.java +++ b/app/src/main/java/com/example/sprout/refactor/model/RoomsModel.java @@ -1,5 +1,6 @@ package com.example.sprout.refactor.model; +import com.example.sprout.refactor.model.entity.Error; import com.example.sprout.refactor.model.entity.Rooms; import com.example.sprout.refactor.repository.RoomRepository; @@ -14,7 +15,7 @@ public class RoomsModel { private BehaviorSubject roomsSubject = BehaviorSubject.create(); - private PublishSubject errorSubject = PublishSubject.create(); + private PublishSubject errorSubject = PublishSubject.create(); private RoomRepository roomRepository = null; public RoomsModel(RoomRepository roomRepository) { @@ -32,7 +33,7 @@ if (roomsSubject.getValue() != null) { roomsSubject.onNext(roomsSubject.getValue()); } - errorSubject.onNext(error); + errorSubject.onNext(new Error(error)); }); } @@ -40,7 +41,7 @@ return roomsSubject.hide(); } - public Observable getErrorSubject() { + public Observable getErrorObservable() { return errorSubject.hide(); } } diff --git a/app/src/main/java/com/example/sprout/refactor/model/entity/Error.java b/app/src/main/java/com/example/sprout/refactor/model/entity/Error.java new file mode 100644 index 0000000..87bbe44 --- /dev/null +++ b/app/src/main/java/com/example/sprout/refactor/model/entity/Error.java @@ -0,0 +1,66 @@ +package com.example.sprout.refactor.model.entity; + +import com.jakewharton.retrofit2.adapter.rxjava2.HttpException; + +/** + * Errorの種類を定義 + */ +public final class Error { + + /** + * エラーのタイプ + */ + private final Type type; + + public Error(Throwable throwable) { + if (throwable instanceof HttpException) { + HttpException httpException = (HttpException) throwable; + this.type = Type.getType(httpException.code()); + } else { + this.type = Type.getType(0); + } + } + + // TODO:サーバ側でステータスコード処理が出来ていないため現状この実装をしている。サーバ側でのステータスコード処理をする。 + public Error(int code) { + this.type = Type.getType(code); + } + + public Type type() { + return type; + } + + public enum Type { + // ネットワークエラー + NetworkError(0), + // クライアントエラーレスポンス + BatRequest(400), + Unauthorized(401), + Forbidden(403), + NotFound(404), + CONFLICT(409), // TODO:人数が上限の場合はこのエラーが起きるが、別のステータスコードに変えるべき + // サーバーエラーレスポンス + InternalServerError(500); + + private final int code; + + private Type(int code) { + /** + * ステータスコード + */ + this.code = code; + } + + public static Type getType(int code) { + // サーバエラーレスポンスはサーバ側で定義できていないので現状500とする + if (500 <= code && code <= 511) { + code = 500; + } + for (Type type : values()) { + if (code == type.code) + return type; + } + return null; + } + } +} diff --git a/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomCreateViewModel.java b/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomCreateViewModel.java index f195645..6d455b8 100644 --- a/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomCreateViewModel.java +++ b/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomCreateViewModel.java @@ -25,8 +25,6 @@ private ObservableField pass = new ObservableField<>(""); private ObservableBoolean hasPass = new ObservableBoolean(false); private CompositeDisposable subscriptions = null; - private PreferenceUtil preferenceUtil = PreferenceUtil.getInstance(); - public RoomCreateViewModel() { } @@ -38,8 +36,6 @@ roomResponseModel.getRoomResopnseObservable() .subscribe( roomResponse -> { - preferenceUtil.saveInt(PreferenceUtil.Key.ROOM_ID, roomResponse.getRoom().getRoomId()); - preferenceUtil.saveInt(PreferenceUtil.Key.MEMBER_ID, roomResponse.getMemberId()); toastMessanger.showToast(new ToastMessage("ルームを作成しました", ToastMessage.Length.SHORT)); navigationMessenger.navigateTo(new NavigationMessage(NavigationMessage.Type.Start, RoomMainActivity.class)); navigationMessenger.navigateTo(new NavigationMessage(NavigationMessage.Type.Finsih)); @@ -58,16 +54,16 @@ * ルーム作成クリック * * @param roomName - * @param pass + * @param key */ - public void onClickCreate(String roomName, String pass) { + public void onClickCreate(String roomName, String key) { // パスワードのチェックが入っている時 if (hasPass.get()) { - if (roomName.isEmpty() || pass.isEmpty()) { + if (roomName.isEmpty() || key.isEmpty()) { toastMessanger.showToast(new ToastMessage("必要項目を入力して下さい", ToastMessage.Length.SHORT)); return; } - roomResponseModel.createRoom(PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.USER_ID), roomName, pass); + roomResponseModel.createRoom(PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.USER_ID), roomName, key); } // パスワードのチェックが入っていない時 else { diff --git a/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomListViewModel.java b/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomListViewModel.java index 66037db..afdb7d2 100644 --- a/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomListViewModel.java +++ b/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomListViewModel.java @@ -6,6 +6,8 @@ import android.support.v7.widget.RecyclerView; import android.widget.LinearLayout; +import com.example.sprout.R; +import com.example.sprout.Sprout; import com.example.sprout.refactor.activity.RoomCreateActivity; import com.example.sprout.refactor.activity.RoomInputKeyActivity; import com.example.sprout.refactor.activity.RoomMainActivity; @@ -77,10 +79,31 @@ ) ); subscriptions.add( + roomsModel.getErrorObservable() + .subscribe( + error -> { + System.out.println(error.type().name()); + switch (error.type()) { + case NetworkError: + toastMessanger.showToast(new ToastMessage(Sprout.get().getResources().getString(R.string.error_network), ToastMessage.Length.SHORT)); + break; + } + } + ) + ); + subscriptions.add( roomResponseModel.getErrorObservable() .subscribe( error -> { - toastMessanger.showToast(new ToastMessage("入室に失敗しました", ToastMessage.Length.SHORT)); + System.out.println(error.type().name()); + switch (error.type()) { + case NetworkError: + toastMessanger.showToast(new ToastMessage(Sprout.get().getResources().getString(R.string.error_network), ToastMessage.Length.SHORT)); + break; + case CONFLICT: + toastMessanger.showToast(new ToastMessage(Sprout.get().getResources().getString(R.string.error_enter_room), ToastMessage.Length.SHORT)); + break; + } } ) ); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7e239f9..ba478f8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -27,5 +27,7 @@ 名前を入力して下さい アカウントを作成しました アカウント作成に失敗しました + 満員のため入室に失敗しました + 電波の良い場所に移動してもう一度試して下さい。