synchronizacja dwóch żądań, jak podejść do tematu, retrofit

0

Mam taki problem: we fragmencie mam przycisk po którego naciśnięciu idą 2 żądania GET do API,
API może mi zwrócić albo kod 200 albo np 404

Potrzebuję obsłużyć następujące przypadki:

  1. dostanę 2 x http 200 -> odpalam nowy fragment
  2. nie dostanę 2 x http 200 -> wyświetlam komunikat użytkownikowi

Jak to rozwiązać? Do wykonywania żadąń korzystam z retrofita i na jedno żądanie mam 2 opcje:

  1. albo będzie onRespone
  2. albo będzie onFailure

Moja propozycja jest taka aby wprowadzić zmienną counter i w dwóch żądaniach inkrementować ją. W momencie gdy counter == 2 to odpalam nowy fragment, jeśli counter po wykonaniu dwóch żądań < 2 wyświetlam komunikat.

Czy moje rozwiązanie jest okej?
Jak podejść do tematu synchronizacji?
Moja propozycja jest następująca: stworzyć metodę: private synchronized void asyncRequestCompleted i w tej metodzie inkrementować countera (counter to zwykła zmienna private int counter = 0)

tak tylko dodam że api nie mogę zmodyfikować, aby spełnić funkcjonalność muszę wykonać 2 żądania

1

Rozwiązanie jest słabe. Ja bym użył RxJava i concatMap albo zip - zależy od tego, czy wyniku jednego żądania musisz użyć do wywołania kolejnego, czy możesz wykonać je równolegle. Jako rezultat możesz otrzymać zagregowany wynik dwóch żądań i zdecydować co z nim zrobić.

Do poczytania:
https://github.com/ReactiveX/RxJava/blob/3.x/README.md
https://github.com/square/retrofit/blob/master/retrofit-adapters/rxjava2/README.md

Ja w ogóle nie podchodzę do Retrofita bez RxJavy, bo kolejkowanie żądań to straszliwa masakra jest i bardzo rozwlekły kod.

0

Dzięki za linki, poczytam o rxjava i może wrócę tu z pytaniami 😀

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