2015-06-09 69 views
0

我有一个多个按钮;当我按下新按钮时,之前(与另一个按钮)运行请求应该被中断并且新的运行。如何实现它?如何取消网络请求改造和rxjava

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 
         } 
        })); 
    } 

回答

3

您可以有一个共同的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); 
    }); 
}