首页 > 解决方案 > Android KotlinRx API 在后台连续调用

问题描述

我是 Rx 的新手,我正在使用 Rx 进行一次 API 调用。它正在工作,但问题是它在我收到响应或错误后不断地制作 API。我正在使用 MVVM 模式。

这是我在视图模型中观察结果的代码:

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

标签: androidkotlinrx-kotlinrx-kotlin2

解决方案


要仅获得一次响应,请使用“单一”类型。您可以使用将数据流转换为 Single

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


推荐阅读