2016-11-18 4 views
0

문제 설명

간단한 함수 buildUseCaseObservable이있는 간단한 클래스가 있습니다. ServerUnavailable, SocketException는 데이터베이스에서 데이터를 읽어도보고해야합니다 : 같은 예외가 실패하면 데이터베이스 관찰 가능한 오류 처리

  • 쓰기 데이터를 성공하면 기능

    1. 시도가
      • 처음으로 인터넷에서 데이터를 가져 오기 위해 다음을 수행해야 오류.
      • 데이터를 수신했지만 데이터가 null이거나 비어있는 경우 데이터베이스의 데이터를 읽어야합니다. 예상처럼

    기본적으로 모든 굵은 점을 제외하고 작동합니다. 웹에서 데이터를 가져 오는 중에 문제가 발생하면 onError 만 호출되고 onNext은 호출되지 않습니다.

    나는

    질문

    입니다 (대신 onNext가 호출, 호출되지 않습니다 onError) 방법은 기본적으로 내가 필요로하지만,이 경우에 내가 오류를 잃어버린거야 일을하는 onErrorResumeNext라는이 있다는 것을 발견 같은 방법 onCompleteWithError 같은 또는 아무런 오류를 잃지 않을 그런 일을 구현하는 방법? onError()onNext()는 상호 배타적 인 것처럼

    @PerActivity 
    public class DataInteractor extends Interactor { 
    
        private RestService rest; 
        private DataService data; 
    
        @Inject 
        AuthorsInteractor(RestService rest, DataService data) { 
         this.rest = rest; 
         this.data = data; 
        } 
    
        @Override 
        protected Observable buildUseCaseObservable() { 
         return Observable.concat(
           rest.getData().doOnNext(data -> data.setAuthors(authors)), 
           data.getData()) 
           .first(data -> data != null && !authors.isEmpty()); 
        } 
    } 
    
  • 답변

    3

    불행하게도, 귀하의 경우에 보인다.

    public static class Result<T> { 
        T data; 
        Throwable error; 
    } 
    

    다음 onErrorResumeNext()의 모습 :

    .onErrorResumeNext(throwable -> new Result(data.getData(), throwable)) 
    
    +0

    거기가 일을 좀 더 우아한 방법 내가 함께 가고 싶어하면 결과 및 오류를 모두 반환 할 수 있도록하는 클래스입니다 내가 뭘하고 싶어? –

    +1

    [이 블로그 게시물] (http://blog.danlew.net/2015/06/22/loading-data-from-multiple-sources-with-rxjava/)은 @VictorApoyan에게 유용 할 수 있습니다. 건배. –

    +0

    @YeMinHtut 덕분에 유용하지만 내 질문에는 적합하지 않습니다. –