微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

switchMapSingle() 不会取消之前的请求

如何解决switchMapSingle() 不会取消之前的请求

我有一个包含 6000 行的 DB 表“order”,我想使用 switchmap 来创建按编号搜索以取消先前的请求。但它不起作用,它总是返回先前请求的结果。我的代码有什么问题?

示例:输入 1..0..7 返回 107%,然后是 10%,然后是 1%。它应该只返回 107%

disposable.add(
                Observable.just(orderParameter)
                .debounce(1,TimeUnit.SECONDS)
                .distinctUntilChanged()
                .switchMapSingle(orderParameter1 -> orderInteractor.getSearchOrderList(orderParameter1))
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(orders -> {
                    getView().showOrders(orders);
                },throwable -> Timber.e(throwable.getMessage())));


@Query("SELECT `order`.order_id as id," +
            "client.last_name || ' ' || SUBSTR(client.first_name,1,1) || '. ' || SUBSTR(client.middle_name,1) || '.' as client_name," +
            "`order`.status as status," +
            "agency.short_name as agency_name," +
            "`order`.creation_date as date," +
            "`order`.price as price " +
            "FROM `order`,agency,client where " +
            "`order`.status =:status and agency.id = `order`.agency_id and client.id = `order`.client_id " +
            "and `order`.agency_id =:agencyId and `order`.order_id like :orderId")
    Single<List<Order>> getordersByStatusAndOrderIdAndAgencyId(String status,String orderId,long agencyId);


public class OrderParameter {
    public long searchNumber = -1;
    public long agencyId = -1;
}


OrderParameter orderParameter = new OrderParameter();
        try {
            if (TextUtils.isEmpty(searchText.trim())) {
                orderParameter.searchNumber = -1;
            } else {
                orderParameter.searchNumber = Long.parseLong(searchText);
            }
        } catch (Exception e) {
        }
        orderParameter.agencyId = agencyId;

UPD:添加获取 OrderParameter

解决方法

在 RxBinding 的帮助下,在 onCreate 中试试这个:

disposable.add(
    RxView.clicks(textField).map(v -> {
            String searchText = searchTextField.getText().toString();
            OrderParameter orderParameter = new OrderParameter();
            try {
                if (TextUtils.isEmpty(searchText.trim())) {
                    orderParameter.searchNumber = -1;
                } else {
                    orderParameter.searchNumber = Long.parseLong(searchText);
                }
            } catch (Exception e) {
            }
            orderParameter.agencyId = agencyId;
            return orderParameter;
          })
          .debounce(1,TimeUnit.SECONDS)
          .distinctUntilChanged()
          .switchMapSingle(orderParameter1 -> 
                  orderInteractor.getSearchOrderList(orderParameter1))
          .subscribeOn(Schedulers.io())
          .observeOn(AndroidSchedulers.mainThread())
          .subscribe(orders -> {
               getView().showOrders(orders);
          },throwable -> Timber.e(throwable.getMessage())));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。