2015-06-30 15 views
0

我有一個經理,它封裝了調用改造服務,因爲我需要保存會話令牌和對象上登錄,則:多次使用相同的可觀測與改造

class LoginManager { 

    public static Observable<Session> login(String email, String password) { 
     Credential credential = new Credential(email, password); 
     Observable<Session> observable = SERVICE.createSession(credential); 

     observable.subscribe(new Subscriber<Session>() { 
      @Override 
      public void onCompleted() { 

      } 

      @Override 
      public void onError(Throwable e) { 
      } 

      @Override 
      public void onNext(Session session) { 
       String token = session.getToken(); 
       saveToken(token); 
       save(session.buildCustomer()); 
      } 
     }); 

     return observable; 
    } 
} 

我的服務是這樣的:

public interface CustomerService { 

    @POST("/api/sessions/customer") 
    Observable<Session> createSession(@Body Credential credential); 

} 

在我的活動中使用管理器內部和外部的可觀察性是否正確?

它有什麼問題?

----編輯

改爲映射:

class LoginManager { 

    public static Observable<Session> login(String email, String password) { 
     Credential credential = new Credential(email, password); 
     return SERVICE.createSession(credential) 
     .map(session - { 
      String token = session.getToken(); 
      saveToken(token); 
      save(session.buildCustomer()); 
      return session; 
     }); 
    } 

} 

這是一個好主意嗎?

回答

2

當有人訂閱它時,observable將開始發射。

我建議你在你的經理中做的事情就是返回observable,然後加上.doOnNext()即可。當你希望在它完成一個操作來改變observable

return observable.doOnNext(new Action1<Session>() { 
    @Override 
    public void call(final Session session) { 
     String token = session.getToken(); 
     saveToken(token); 
     save(session.buildCustomer()); 
    } 
}); 

.map使用。

這樣,無論何時onNext會發生在您的可觀察(即訂閱您的活動)上,您將有權訪問Session

+0

它的工作,謝謝 – Caipivara

相關問題