Android 应用架构 - RxJava
Android app architecture - RxJava
我正在开发一个 android 应用程序(主要是尝试使用 RxJava/Android 来解决问题)。这些是我的要求:
- 为登录用户维护一个持久的全局状态
- 每当用户状态发生变化时,相应地更新视图。
我正在使用单例 User
实例来维护全局状态,并使用 SharedPreferences
来持久化。现在我正在尝试使用 RxAndroid 来通知视图的更改,但我对如何去做一无所知。
我们如何跟踪 User
中的变化?我可以使用 User
中的设置器从可观察对象发出吗?如果是这样,我该怎么做?
如果有人也能提供代码示例,我将不胜感激。
P.S。这是我的 User
class 定义的示例,我没有使用任何设置器。
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;
}
这只是我的用户 class 的示例骨架(我已经剥离了其他所有内容),我只需要知道这些字段的设置器是什么样子的,如果这种方法是甚至被认为是正确的,或者是否有更好的选择。
如果您需要更多信息,请告诉我。
我会使用来自 RxJava 的 PublishSubject
http://reactivex.io/RxJava/javadoc/rx/subjects/PublishSubject.html 和来自它的 Activtiy subscribe/unsubsribe 的 onResume/onPause。
在用户中创建 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);
}
}
因此,当您使用方法 setName of User class(如您所提到的单例)时,订阅该 Steam 的所有内容都会收到回复。喜欢
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();
}
}
我正在开发一个 android 应用程序(主要是尝试使用 RxJava/Android 来解决问题)。这些是我的要求:
- 为登录用户维护一个持久的全局状态
- 每当用户状态发生变化时,相应地更新视图。
我正在使用单例 User
实例来维护全局状态,并使用 SharedPreferences
来持久化。现在我正在尝试使用 RxAndroid 来通知视图的更改,但我对如何去做一无所知。
我们如何跟踪 User
中的变化?我可以使用 User
中的设置器从可观察对象发出吗?如果是这样,我该怎么做?
如果有人也能提供代码示例,我将不胜感激。
P.S。这是我的 User
class 定义的示例,我没有使用任何设置器。
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;
}
这只是我的用户 class 的示例骨架(我已经剥离了其他所有内容),我只需要知道这些字段的设置器是什么样子的,如果这种方法是甚至被认为是正确的,或者是否有更好的选择。
如果您需要更多信息,请告诉我。
我会使用来自 RxJava 的 PublishSubject
http://reactivex.io/RxJava/javadoc/rx/subjects/PublishSubject.html 和来自它的 Activtiy subscribe/unsubsribe 的 onResume/onPause。
在用户中创建 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);
}
}
因此,当您使用方法 setName of User class(如您所提到的单例)时,订阅该 Steam 的所有内容都会收到回复。喜欢
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();
}
}