rxAndroid+retrofit 통신 결과 분기 방법 문의

조회수 2062회

안녕하세요 요즘 rxAndroid해보려고 계속 삽질하고 있는 개발자입니다 ㅠㅠ 흠...... 간단한거같은데 제가 개념이 확실히 잡히지 않아서 그런가 어렵네요 초고수님들의 조언 부탁드립니다.

현재 rxAndroid 와 retrofit 을 사용하여 서버통신을 해보고있는데요. 기본 통신 같은건 되는데 원하는 상태는 통신 성공 시에 response 값이

{
"resultCode": "1999"

"resultMsg": "토큰이 유효하지 않습니다."

"resultData": {"data": null}
}

이런형식으로 와서 resultCode 값을 확인한 후 그거에 따른 처리를 따로해주고싶은데 제가 해본방식이 2개가 있는데 둘다 뭔가.......... 이건 아니다싶어서 ㅋㅋㅋㅋ 힌트 주시면 감사하겠습니다 제가 했던 방식은 아래 2방식입니다.

1.옵저블 하나더생성

Observable<StackChangeObj> listObserable = stackChangeService.getRecentUsers();

 Observable<Object> centerObserable = 
listObserable.subscribeOn(Schedulers.io())
.flatMap(new Func1<StackChangeObj, Observable<Object>>() {
            @Override
     public Observable<Object> call(StackChangeObj stackChangeObj) {
                if(stackChangeObj.getResult()==SUCESS){
                    return Observable.just(stackChangeObj);
                }else{
                    return Observable.just("Empty");
                }              
     }
 });

centerObserable.subscribe(new Subscriber<Object>() {
            @Override
            public void onCompleted() {}

            @Override
            public void onError(Throwable e) {e.printStackTrace();}

            @Override
            public void onNext(Object o) {
               /* result logic*/
            }
 });

2.서브젝트사용

Observable<StackChangeObj> listObserable = stackChangeService.getRecentUsers();

PublishSubject<Object> subject = PublishSubject.create();

listObserable.subscribeOn(Schedulers.io())
.subscribe(new Subscriber<StackChangeObj>() {
            @Override
            public void onCompleted() {}

            @Override
            public void onError(Throwable e) {e.printStackTrace();}

            @Override
            public void onNext(StackChangeObj stackChangeObj) {
                if(stackChangeObj.getResult()==SUCESS){
                    subject.onNext(stackChangeObj);
                }else{
                    subject.onNext("ERRORCODE");
                }
            }

 });

subject.subscribe(new Subscriber<Object>() {
            @Override
            public void onCompleted() {}

            @Override
            public void onError(Throwable e) {e.printStackTrace();}

            @Override
            public void onNext(Object o) {
               /* result logic*/
            }
 });

뭔가 올리기에는 너무 엉망이지만 힌트를 얻기위해 올려봄니다

  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)