retrofit和rxjava中如何取消网络请求
How cancel network request in retrofit and 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
}
}));
}
您可以拥有一个公共 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);
});
}
我有多个按钮;当我按下新按钮时,上一个(使用另一个按钮)运行 请求应该被中断并运行新的。如何实现?
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
}
}));
}
您可以拥有一个公共 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);
});
}