Android Постоянный вызов API KotlinRx в фоновом режиме - PullRequest
0 голосов
/ 22 марта 2020

Я новичок в Rx, и я делаю один вызов API, используя Rx. Он работает, но проблема в том, что он постоянно создает API после того, как получил ответ или ошибку. Я использую шаблон MVVM.

Вот мой код, как я наблюдаю результат в View Model:

val usersList = getGitHubUsersUseCase.getUsers(since.toInt())

        usersList?.subscribeOn(Schedulers.io())
            ?.observeOn(AndroidSchedulers.mainThread())
            ?.subscribe({
                if (it.error == null) {
                    var sinceState = SinceState(since, since.isNotEmpty(), it.users)
                    stateLiveData.postValue(sinceState)
                } else {
                    var sinceState =
                        SinceState(since, since.isNotEmpty(), emptyList(), it.error?.message)
                    stateLiveData.postValue(sinceState)
                }
            }, {
                var sinceState = SinceState(since, since.isNotEmpty(), emptyList(), it.message)
                stateLiveData.postValue(sinceState)
            })

Как мне прекратить наблюдать, как только я получил ответ или ошибку? Я что-то упускаю?

Если я не прекращаю непрерывно совершать вызовы, то слишком много вызовов API и сервер начинает возвращаться:

HTTP 403 запрещено

1 Ответ

0 голосов
/ 22 марта 2020

Чтобы получить ответ только один раз, используйте тип «Один». Вы можете конвертировать ваш поток данных в один, используя

val usersList = getGitHubUsersUseCase.getUsers(since.toInt()).firstOrError()

...