Rx java RxJava可观测
我正在尝试我的第一个RxJava示例 我有一个带有文本框和三个按钮的主要活动。第一个按钮初始化单独类中的整数。第二个按钮订阅了一个被认为是观察整数的可观察对象。第三个按钮将整数的值减少一 这是我的密码Rx java RxJava可观测,rx-java,rx-android,Rx Java,Rx Android,我正在尝试我的第一个RxJava示例 我有一个带有文本框和三个按钮的主要活动。第一个按钮初始化单独类中的整数。第二个按钮订阅了一个被认为是观察整数的可观察对象。第三个按钮将整数的值减少一 这是我的密码 package com.someurl.www.myobservable; 导入android.support.v7.app.ActionBarActivity; 导入android.os.Bundle; 导入android.view.Menu; 导入android.view.MenuItem;
package com.someurl.www.myobservable;
导入android.support.v7.app.ActionBarActivity;
导入android.os.Bundle;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
进口接收。可观察;
输入接收用户;
导入rx.android.schedulers.AndroidSchedulers;
导入rx.functions.Action1;
导入rx.schedulers.schedulers;
公共类MainActivity扩展了ActionBarActivity{
文本视图电视显示;
按钮BTNInitialize;
按钮BTN订阅类;
按钮btnChangeInt;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvDisplay=(TextView)findViewById(R.id.TextView);
btnInitialze=(按钮)findViewById(R.id.btnInitialize);
BTNSSubscribeClass=(按钮)findViewById(R.id.BTNSSubscribeClass);
btnChangeInt=(按钮)findViewById(R.id.btnChangeInt);
btnInitialze.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
myObserve.InitializeBigInt(6);
}
});
BTNSSubscribeClass.setOnClickListener(新视图.OnClickListener()中){
@凌驾
公共void onClick(视图v){
//子类now();
服从();
}
});
btnChangeInt.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
int myNewInt=myObserve.DecreaseBigInt();
tvDisplay.append(“\nFrom Button”+字符串.valueOf(myNewInt));
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(右菜单菜单菜单主菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
Observable mObservable=Observable.create(newobservable.OnSubscribe()){
@凌驾
public void call(订户通常,您希望使用BehaviorSubject
存储您的值并向其传递更改。但是,您似乎也需要原子递减功能。请尝试以下操作:
public class AtomicBehaviorSubject {
private static final AtomicInteger value = new AtomicInteger();
private static final Subject<Integer, Integer> setter =
BehaviorSubject.<Integer>create().toSerialized();
public static void setValue(int newValue) {
value.set(newValue);
setter.onNext(newValue);
}
public static void decrementValue() {
for (;;) {
int curr = value.get();
if (curr == 0) {
return;
}
int u = curr - 1;
if (value.compareAndSet(curr, u)) {
if (u == 0) {
setter.onCompleted();
} else {
setter.onNext(u);
}
return;
}
}
}
public static Observable<Integer> valueChanged() {
return setter;
}
}
公共类原子行为主题{
私有静态最终AtomicInteger值=新的AtomicInteger();
私有静态最终主题设置器=
BehaviorSubject.create().toSerialized();
公共静态void setValue(int newValue){
value.set(newValue);
setter.onNext(新值);
}
公共静态无效递减值(){
对于(;;){
int curr=value.get();
如果(当前==0){
返回;
}
INTU=电流-1;
if(值比较数据集(当前,u)){
如果(u==0){
setter.onCompleted();
}否则{
setter.onNext(u);
}
返回;
}
}
}
公共静态可观测值变更(){
回程设定器;
}
}