Android nasłuchiwanie aby wszystkie elementy w boolean[] były true

0

Chce schować progressbar kiedy wszystkie elementy z boolean[3] są true. Używam do tego celu MutableLiveData. Obecnie progressbar cały czas się kręci nawet kiedy wszystkie elementy są ustawione na true. Oto mój kod.

LeftDrawerAdapter:

if (drawerItemList.get(pos).getTitle().equals(activity.getResources().getString(R.string.statistics_drawer))) {
                Dialog dialog = new MyDialog(activity, R.layout.statistics);
                ProgressBar progressBar = dialog.findViewById(R.id.bigProgressBar);

                MutableLiveData<boolean[]> listen = new MutableLiveData<>();
                listen.setValue(new boolean[]{false, false, false});
                restModel.getAllUsers(listen.getValue(), dialog.findViewById(R.id.usersRegisteredValue));
                restModel.getUsersOnline(listen.getValue(), dialog.findViewById(R.id.usersOnlineValue));
                restModel.getMaxNumberOfUsersOnline(listen.getValue(), dialog.findViewById(R.id.maxNumberOnlineValue));

                listen.observe((LifecycleOwner)activity, new Observer<boolean[]>() {
                    @Override
    public void onChanged(boolean[] booleans) {
        Stream<Boolean> stream = IntStream.range(0, booleans.length).mapToObj(idx -> booleans[idx]);
        if (stream.allMatch(val -> val))
            progressBar.setVisibility(View.GONE);
        }
                });

                dialog.show();
            }

RestModel:

    public void getAllUsers(final boolean isThreeStatisticsCallSucceeded[], TextView textView) {
    Call<String> result = Api.getClient1Or2().getAllUsers();
    result.enqueue(new Callback<String>() {
        @Override
        public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
            if(response.body() != null) {
                textView.setText(response.body());
                isThreeStatisticsCallSucceeded[0] = true;
            }
        }

        @Override
        public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
            Log.e("getAllUsers failure", t.toString());
            call.clone().enqueue(this);
        }
    });
}

public void getUsersOnline(boolean isThreeStatisticsCallSucceeded[], TextView textView) {
    Call<String> result = Api.getClient1Or2().getUsersOnline();
    result.enqueue(new Callback<String>() {
        @Override
        public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
            if (response.body() != null) {
                textView.setText(response.body());
                isThreeStatisticsCallSucceeded[1] = true;
            }
        }

        @Override
        public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
            Log.e("getUsersOnline failure", t.toString());
            call.clone().enqueue(this);
        }
    });
}


public void getMaxNumberOfUsersOnline(boolean isThreeStatisticsCallSucceeded[], TextView textView) {
    Call<String> result = Api.getClient1Or2().getMaxUsersOnline();
    result.enqueue(new Callback<String>() {
        @Override
        public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
            if (response.body() != null) {
                textView.setText(response.body());
                isThreeStatisticsCallSucceeded[2] = true;
            }
        }

        @Override
        public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
            Log.e("getMaxNumberOfUsersOnli", t.toString());
            call.clone().enqueue(this);
        }
    });
}

Jak to naprawić?

0

@solid_snake: Wysyłasz do RestModelu referencję do tej samej tablicy i modyfikacja wartości wewnątrz tablicy następuje normalnie. Natomiast twój obserwator listen.observe nigdy nie zostanie wywołany, bo modyfikujesz samą wewnętrzną tablicę, zamiast obiekt **listen ** typu MutableLiveData. Jeśli pragniesz to osiągnąć musisz wywołać na obiekcie listen.setValue(new booleanArray[]), co spowoduje ztriggerowanie obserwatora.
Natomiast chciałem dodać, że kod jest słabej jakości i przydał by mu się solidny refactor. Nie przekazuj na Boga widoków do modelów!

1 użytkowników online, w tym zalogowanych: 0, gości: 1