android - 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
解决方案
要仅获得一次响应,请使用“单一”类型。您可以使用将数据流转换为 Single
val usersList = getGitHubUsersUseCase.getUsers(since.toInt()).firstOrError()
推荐阅读
- ios - CoreStore 离线模式同步功能
- mysql - Mysql 从服务器 a 转储到服务器 b 上的文件
- eclipse-pde - java.lang.NoSuchMethodError: javax.media.opengl.GLDrawableFactory.initSingleton()V 试图运行基于 worldwind 的应用程序
- wordpress - 自定义永久链接结构:按语言组织的多种自定义帖子类型
- python - 在 PyTorch 中,如何在训练期间使某些模块“参数”保持静态?
- ruby-on-rails - 切换到 selenium 后,CI 将无法为 Rails 项目正确执行
- python - 制作一个数组,每个数组有 10 个项目
- android - 如何确保应用程序处于后台模式时不会杀死 Flutter 进程
- react-native - 开玩笑:测试套件无法运行(Expo SDK 需要 Expo 才能运行)
- java - 尝试单击包含空格的超链接