我有以下代码:
public class CheckoutPresenter extends CheckinOutPresenter {
@Inject
public CheckoutPresenter(ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread, OnlineBookingRepository onlineBookingRepository, OfflineBookingRepository offlineBookingRepository, ImageRepository imageRepository) {
super(threadExecutor, postExecutionThread, onlineBookingRepository, offlineBookingRepository, imageRepository);
}
@Override
protected void bindIntents() {
Observable<CheckinOutViewState> checkinViewStateObservable =
intent(CheckinOutView::fetchLocalCheckin)
.switchMap(uuid -> offlineBookingRepository.fetchCheckoutById(uuid, false)) <-- Here sometimes get called, sometimes not
.subscribeOn(Schedulers.from(threadExecutor))
.map(CheckinOutViewState.SuccessLocalFetch::new)
.cast(CheckinOutViewState.class)
.onErrorReturn(CheckinOutViewState.ErrorStateOut::new)
.observeOn(postExecutionThread.getScheduler());
Observable<CheckinOutViewState> sendCheckin =
intent(CheckinOutView::sendCheckin)
.switchMap(checkinIntent -> imageRepository.saveImage(checkinIntent.getFilename(), checkinIntent.getSignature())
.subscribeOn(Schedulers.from(threadExecutor))
.filter(cnhImageResponse -> cnhImageResponse.getLinks() != null)
.switchMap(response -> {
CheckinOutCommand command = checkinIntent.getCheckinOutCommand();
command.setSignatureUrlImage(response.getLinks().getUrl());
return onlineBookingRepository.doCheckout(command).subscribeOn(Schedulers.from(threadExecutor));
})
.subscribeOn(Schedulers.from(threadExecutor))
.map(CheckinOutViewState.SentSuccessfuly::new)
.cast(CheckinOutViewState.class)
.startWith(new CheckinOutViewState.LoadingStateOut())
.doOnError(error -> offlineBookingRepository.doCheckout(checkinIntent.getCheckinOutCommand()))
.doOnComplete(() -> offlineBookingRepository.deleteCheckoutById(checkinIntent.getCheckinOutCommand().getBookingId(), false))
.onErrorReturn(CheckinOutViewState.ErrorStateOut::new))
.observeOn(postExecutionThread.getScheduler());
subscribeViewState(Observable.merge(checkinViewStateObservable, sendCheckin), CheckinOutView::render);
}
}
继承自:
public abstract class CheckinOutPresenter extends MviBasePresenter<CheckinOutView, CheckinOutViewState> {
protected final ThreadExecutor threadExecutor;
protected final PostExecutionThread postExecutionThread;
protected final OnlineBookingRepository onlineBookingRepository;
protected final OfflineBookingRepository offlineBookingRepository;
protected final ImageRepository imageRepository;
CheckinOutPresenter(ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread, OnlineBookingRepository onlineBookingRepository, OfflineBookingRepository offlineBookingRepository, ImageRepository imageRepository) {
this.threadExecutor = threadExecutor;
this.postExecutionThread = postExecutionThread;
this.onlineBookingRepository = onlineBookingRepository;
this.offlineBookingRepository = offlineBookingRepository;
this.imageRepository = imageRepository;
}
}
@Override
public Observable<String> fetchLocalCheckin() {
return Observable.just(booking.getBookingId());
}
但问题是,有时会触发 fetchLocalCheckin,有时不会。我在这里做错了什么?我错过了什么 ?