【问题标题】:How cancel network request in retrofit and rxjava如何在改造和 rxjava 中取消网络请求
【发布时间】:2015-06-09 14:27:12
【问题描述】:

我有多个按钮;当我按下新按钮时,以前的(使用另一个按钮)运行请求应该被中断并且新的运行。如何实现?

for (button : Buttons)  { 
button.setOnClickListener(b -> networkApi.getLongContentFromUrl(url)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Subscriber<JsonElement>() {
                        @Override
                        public void onCompleted() {}

                        @Override
                        public void onError(Throwable e) {
                        }

                        @Override
                        public void onNext(JsonElement jsonElement) {
                            //do with result
                        }
                    }));
    }

【问题讨论】:

    标签: retrofit reactive-programming rx-java


    【解决方案1】:

    您可以拥有一个共同的SerialSubscription,并在单击按钮时将您的订阅者分配给它。它会取消订阅,从而取消您之前的直播:

    SerialSubscription serial = new SerialSubscription();
    for (Button btn : buttons) {
        btn.setOnClickListener(e -> {
             Subscriber<JsonElement> s = new Subscriber<JsonElement>() {
                 @Override
                 public void onCompleted() {}
                 @Override
                 public void onError(Throwable e) {}
                 @Override
                 public void onNext(JsonElement jsonElement) {
                     //do with result
                 }
             };
             serial.set(s);
             networkApi.getLongContentFromUrl(url)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(s);
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 2016-12-25
      • 2021-06-04
      • 2015-08-23
      相关资源
      最近更新 更多