同步回调android,android - 使用rxjava Android进行同步调用 - SO中文参考 - www.soinside.com...

我的应用程序有一个SearchView。当用户键入SearchView时,onQueryTextChange将查询传递给演示者,然后调用API。我正在使用Retrofit和RxJava进行调用。调用返回一个json文件,其中包含用户目前键入的内容。问题在于,如果用户快速输入字母并且网络速度慢,则有时SearchView不会根据所有键入的字母显示结果,但可能直到倒数第二,因为最后一次调用可以更快地获得结果与第二个相比。

示例:用户开始输入:

“cou” - >调用API(3个字母后首次调用) - >开始返回值

“n” - >拨打电话 - >开始返回值

“t” - >拨打电话 - >开始返回值

“r” - >拨打电话(连接速度慢)

“y” - >拨打电话 - >开始返回值

- >“r”最终获得结果并返回它们

public Observable> getValues(String query) {

return Observable.defer(() -> mNetworkService.getAPI()

.getValues(query)

.retry(2)

.onErrorReturn(e -> new ArrayList<>()));

}

调用非常简单,每当我收到错误时,我都不想显示任何内容。

有办法解决这个问题吗?或者也许这不是使用反应式编程的情况?

编辑:为了更清楚,流程如下:

当用户开始键入时,自定义searchview具有侦听器。用户开始输入活动后,请调用Presenter。

演示者将订阅由交互者返回的观察者:

主持人:

addSubscription(mInteractor.getValues(query)

.observeOn(mMainScheduler)

.subscribeOn(mIoScheduler)

.subscribe(data -> {

getMvpView().showValues(data);

}, e -> {

Log.e(TAG, e.getMessage());

}));

交互器:

public Observable> getValues(String query) {

return Observable.defer(() -> mNetworkService.getAPI()

.getValues(query)

.debounce(2, TimeUnit.SECONDS)

.retry(2)

.onErrorReturn(e -> new ArrayList<>()));

所以现在要么在'普通'搜索视图中更改自定义搜索视图然后使用RxBinding,要么我应该使用处理程序或类似的东西(但仍然在如何适应我的架构)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值