Rx java 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;

我正在尝试我的第一个RxJava示例

我有一个带有文本框和三个按钮的主要活动。第一个按钮初始化单独类中的整数。第二个按钮订阅了一个被认为是观察整数的可观察对象。第三个按钮将整数的值减少一

这是我的密码

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);
}
返回;
}
}
}
公共静态可观测值变更(){
回程设定器;
}
}