1st, tôi đã cố gắngLàm thế nào để giữ thuê bao sau onerror (RxJava)
// used retrofit
public interface ApiService {
@GET(/get_some_data)
Observable<SomeData> getSomeData();
}
// clickStream created by onClick event
// No.1
clickStream
.flatMap(e -> apiService.getSomeData())
.subscribe(
success -> Log.d("tag", "success"),
error -> Log.d("tag", "error"),
() -> Log.d("tag", "complete"))
này là tốt nếu getSomeData() là thành công. Tôi có thể nhận được một số dữ liệu mỗi lần nhấp.
nhưng nếu xảy ra lỗi, hủy đăng ký. (do đó bấm không hoạt động sau khi lỗi)
thứ 2, tôi đã cố gắng bên dưới. (Với onErrorResumeNext) nhưng đã hủy đăng ký.
(không gọi onerror, nhưng gọi onComplete. Nên đã hủy đăng ký)
// No.2
clickStream
.flatMap(e -> apiService.getSomeData())
.onErrorResumeNext(throwable -> Observable.empty()) // add this line
.subscribe(
success -> Log.d("tag", "success"),
error -> Log.d("tag", "error"),
() -> Log.d("tag", "complete"))
thứ 3, tôi đã cố gắng bên dưới. (Với retry)
// No.3
clickStream
.flatMap(e -> apiService.getSomeData())
.retry(5) // add this line
.subscribe(
success -> Log.d("tag", "success"),
error -> Log.d("tag", "error"),
() -> Log.d("tag", "complete"))
này là tốt hơn so với Không .1. nhưng không được đăng ký.
Tôi muốn thực hiện nút làm mới hoạt động sau khi lỗi.
Tôi muốn biết
- Tôi có thể giữ hoặc tái đăng ký thuê bao?
- Đây có phải là một cách thích hợp trong Rxjava?
xin lỗi vì tiếng Anh kém của tôi.
Nó làm việc! Tôi có thể giữ thuê bao sau khi onError. Chìa khóa là "** inner ** Observable". cảm ơn bạn! – kyanro
không phải là ẩn/ngăn chặn mọi lỗi? –
Có, tất nhiên - hoặc bạn nhận được 'onError' hoặc bạn có thể tiếp tục sử dụng' Người đăng ký', chứ không phải cả hai. Những gì bạn có thể làm, tuy nhiên, đang phát ra một số loại thông báo lỗi: 'throwable -> Observable.just (new ThereWasSomeProblemWithTheApi()))'. Lệnh 'T' trong' Quan sát 'sau đó sẽ phải có một số giao diện phổ biến mà được chia sẻ bởi 'ThereWasSomeProblemWithTheApi' và kiểu dữ liệu thực tế của bạn. –