2015-12-20 175 views
4

我正在开发一个Android应用程序(基本上试图让我的头部使用RxJava/Android)。这些是我的要求:Android应用程序体系结构 - RxJava

  • 保持持久和全局状态登录用户
  • 每当用户状态的变化,相应地更新视图。

我使用的是单User实例维护全局状态和SharedPreferences持久性。现在我正在尝试使用RxAndroid来通知视图的更改,但我对如何解决这个问题毫无头绪。

我们如何跟踪User的变化?我可以使用User中的setter从observables发出;如果是这样,我该怎么办?

我真的很感激,如果任何人都可以提供代码示例。

P.S.这是我的User类定义的示例,我没有使用任何setter。

public class User { 
    public String userName; 
    public String emailId; 
    public List<Friend> friends; 

    public User() { 
    friends = new ArrayList<Friend>(); 
    } 
} 

public class Friend { 
    public String userName; 
    public String emailId; 
    public String role; 
} 

这只是我的User类的样本骨架(我已经剥去一切),我只需要知道的制定者是如何将会是什么样的这些领域,如果这种做法,甚至认为是对或者如果有更好的选择。

如果您需要更多信息,请让我知道。

+0

你已经证明看起来并不像一个单身那类定义 –

+0

啊,我只是做了我的'User'类的样品骨架(剥去一切),我只需要知道如何制定者将看起来像这些领域,如果我的方法是正确的或有更好的选择。 – devmaestro

回答

0

我会使用PublishSubjecthttp://reactivex.io/RxJava/javadoc/rx/subjects/PublishSubject.html从RxJava和onResume/onPause Activtiy从它订阅/ unsubsribe。

内部用户创建PublishSubject

public class User { 
    public PublishSubject<User> stream = PublishSubject.create() 
    public String userName; 
    public String emailId; 
    public List<Friend> friends; 

    public User() { 
    friends = new ArrayList<Friend>(); 
    } 
    public void setName(String name){ 
     stream.onNext(this); 
    } 
} 

因此,当您将使用User类的方法的setName(辛格尔顿如你所提到的)订阅蒸汽将recive回答每一件事情。像

public class MyActivity extends Activity{ 

      private TextView nameTextView ; 
      private Subscription subs; 
      @Override 
      public void onCreate{ 
      //initialization of fields 
      } 

      @Override 
      public void onResume(){ 
       super.onResume(); 
       subs = User.getInstance().stream.subscribe{user-> nameTextView.setText(user.username) } 
      } 

      @Override 
      public void onPause(){ 
      super.onPause(); 
      subs.unsubscribe(); 
      } 
    } 
+0

谢谢,会试试这个解决方案。 – devmaestro