diff --git a/app/src/main/java/org/ntlab/irisclient/viewmodels/RoomViewModel.java b/app/src/main/java/org/ntlab/irisclient/viewmodels/RoomViewModel.java index e01dbe9..3cf79f5 100644 --- a/app/src/main/java/org/ntlab/irisclient/viewmodels/RoomViewModel.java +++ b/app/src/main/java/org/ntlab/irisclient/viewmodels/RoomViewModel.java @@ -11,6 +11,7 @@ import java.io.Console; import java.util.List; +import java.util.Objects; import retrofit2.Call; import retrofit2.Callback; @@ -59,6 +60,29 @@ return this.stateLiveData; } + private boolean compareMembers(List a, List b) { + + int i; + for(i = 0; i < a.size(); i++ ) { + if (Objects.equals(a.get(i).getNickname(), b.get(i).getNickname())) { + if (Objects.equals(a.get(i).getBelongs(), b.get(i).getBelongs())) { + if (a.get(i).getMaster() == b.get(i).getMaster()) { + //ここまで比較して要素が一緒ならi番目は同じなので次へ + }else { + return false; + } + }else{ + return false; + } + }else{ + return false; + } + } + + //全ての要素が一緒ならtrueを返す + return true; + } + //----------------------------------------------------------------------------- //各Activityでのボタン処理 //チーム&マスター変更 @@ -160,21 +184,33 @@ public void onResponse(Call> call, Response> response) { if (response.isSuccessful()){ - membersLiveData.setValue(response.body()); - membersPreData = response.body(); - - /* - if(response.body().equals(roomJsonPreData)){ - //値が一緒なら書き換えない - }else{ - //値が異なるときのみライブデータを上書き + if (membersPreData != null) { + if (response.body().isEmpty()) { + //もしもレスポンスが空なら何もしない + } else { + if (response.body().size() != membersPreData.size()) { + //配列のサイズが異なるならその時点でライブデータ書き換え + membersLiveData.setValue(response.body()); + membersPreData = response.body(); + } else { + //配列のサイズが同じ時は比較開始 + if (compareMembers(response.body(), membersPreData)) { + //比較してtrueなら何もしない + } else { + //比較してfalseならライブデータ書き換え + membersLiveData.setValue(response.body()); + membersPreData = response.body(); + } + } + } + } else { membersLiveData.setValue(response.body()); - roomJsonPreData = response.body(); + membersPreData = response.body(); } - */ - } + } + @Override public void onFailure(Call> call, Throwable t) { }