2016-08-03 4 views
3

은 바보 같은 질문이지만, 나는 잠시 동안 어떤 대답을 찾을 수 없습니다, 그래서 그것을 물어RxJava : 관찰 가능 객체를 추출하는 방법? 나는이 느낌

그래서, 나는 다음을 수행하는 기능이 필요합니다 :) 미안거야 :

1)는 관찰 가능한 사용자

2) 관찰 사용자

3)에서 사용자 개체는 사용자에 대한 몇 가지 정보를 가져옵니다 취득을 만드는 또 다른 함수를 호출하고 어떤 논리

4)를 통해 실행 Observ를 반환합니다. 수령인

2 단계에서 문제가 있습니다. 어떻게해야합니까? 아니면이 접근법이 근본적으로 잘못 되었습니까?

다음은 함수의 "모델"입니다 :

@Override protected Observable buildUseCaseObservable(){ 

    Observable<User> userObservable = userRepository.findUserByUsername(username); 

    //User user = ?????? 

    //if (...) {...} 

    return userObservable; 
} 

당신을 :) 감사

+0

처음 관찰 가능한 무엇입니까 여기 차단에 대한 더 많은 예제를 볼 수 있습니다 ? 그것은 'Observable '입니까? [mcve]를 보여줄 수 있습니까? –

+0

아마도 Observable을 구독하고 User와 Action을해야 할 것입니다. –

+0

@ cricket_007에서 코드를 추가했습니다. 그래, 관측 용이다 . 내 안드로이드 애플 리케이션에 대한 인증을 구현하려고하는데, 이것은 권한 사용 사례의 일부로되어 있습니다. –

답변

1

관찰에서 당신은 할 수 없습니다 '추출'뭔가. 항목을 구독 할 때 관찰 할 수있는 항목을 가져옵니다 (항목을 내 보낸 경우). 반환하는 객체는 Observable 유형이므로 연산자를 적용하여 데이터를 연결로 변환 할 수 있습니다. RxJava에서 가장 일반적으로 사용하기 쉬운 연산자는 함수를 적용하여 데이터 형식을 다른 형식으로 변경하는 'map'입니다. 귀하의 경우에는

, 당신은 Observable<user>에 직접 '지도'연산자를 사용할 수 있습니다

return userRepository.findUserByUsername(username)  
     .map(new Func1<User, Object>() { 
       @Override 
       public Object call(User u) { 
        // .. 
        // apply your logic here 
        // .. 
        return myDataObject; // return you data here to subcribers 
       } 
      }); 

난 당신이 RxJava의 기초를 알고 연산자를 사용하는 방법에 대한 소개를 필요로하지 않는다 희망한다. 맵 문서에 대해서는, 따라이 link

3
당신은 관찰자 후두둑에 따라 관찰 가능한 디자인으로 파이프 라인

 Observable.just("hello world") 
       .map(sentence-> sentence.toUpperCase) --> do whatever you need. 
       .subscribe(sentence -> println(sentence) 

를 통해 관찰 래핑 객체를 얻기 위해 사업자 (지도, flatMap, doOnNext 등)를 사용할 수 있습니다

, 관측 가능에 가입하고 일단 파이프 라인을 통해 아이템을 받으면.

또한 할 수있는 일은 observer patter를 사용하는 것입니다. 대신 을 사용하여 차단을 사용하여 파이프 라인에서 개체를 추출하면됩니다. 하지만 그건 안티 패턴을 고려하고 좋은 디자인을 적용하지 않는다는 것을 의미합니다.

  @Test 
public void observableEvolveAndReturnToStringValue() { 
    assertTrue(Observable.just(10) 
         .map(String::valueOf) 
         .toBlocking() 
         .single() 
         .equals("10")); 
} 

당신은 https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/utils/ObservableToBlocking.java

관련 문제