Android 如何提供两个整数值并发出一个字符串

Android 如何提供两个整数值并发出一个字符串,android,rx-java,rx-android,rx-java2,Android,Rx Java,Rx Android,Rx Java2,我正在学习RxAndroid api,所以我创建了一个示例,其中输入是两个整数,输出应该是包含这些整数的字符串。例如 对于1和2,输出应为“1,2”,依此类推 在下面的代码是我试图实现我的计划,但我需要指导和帮助请 代码: public class MainActivity extends AppCompatActivity { private final static String TAG = MainActivity.class.getSimpleName(); private Edit

我正在学习RxAndroid api,所以我创建了一个示例,其中输入是两个整数,输出应该是包含这些整数的字符串。例如 对于1和2,输出应为“1,2”,依此类推

在下面的代码是我试图实现我的计划,但我需要指导和帮助请

代码

public class MainActivity extends AppCompatActivity {

private final static String TAG = MainActivity.class.getSimpleName();

private EditText mEditTextValue1 = null;
private EditText mEditTextValue2 = null;
private Button mButtonStartAsyncTask = null;
private rx.Observable<Integer> mAsyncObservable = null;
private TextView mTextViewProcessedValue = null;

Subscriber<String> mAsyncSubscriber = new Subscriber<String>() {
    @Override
    public void onCompleted() {
        Log.w(TAG, "onCompleted(mAsyncSubscriber)");
    }

    @Override
    public void onError(Throwable e) {
        Log.w(TAG, "onError(mAsyncSubscriber)");
    }

    @Override
    public void onNext(String next) {
        Log.w(TAG, "onNext(mAsyncSubscriber)");

        mTextViewProcessedValue.setText();
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    initViews();
}

private void initViews() {
    mEditTextValue1 = (EditText) findViewById(R.id.editTextValue1);
    mEditTextValue2 = (EditText) findViewById(R.id.editTextValue2);
    mButtonStartAsyncTask = (Button) findViewById(R.id.buttonStartAsyncTask);

    mButtonStartAsyncTask.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Integer value1 = Integer.valueOf(mEditTextValue1.getText().toString());
            Integer value2 = Integer.valueOf(mEditTextValue2.getText().toString());

            mAsyncObservable = rx.Observable.just(value1, value2)
                    .delay(3, TimeUnit.SECONDS, AndroidSchedulers.mainThread())

                    .doOnNext(items-> {
                        mTextViewProcessedValue = (TextView) findViewById(R.id.textViewProcessedValue);

                        return value1 + ", " + value2;
                    })

                    .doOnCompleted(new Action0() {
                        @Override
                        public void call() {
                            Log.w(TAG, "doOnCompleted");
                        }
                    })

            //.subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe((Action1<? super Integer>) mAsyncSubscriber);

        }
    });
}
}
public类MainActivity扩展了AppCompatActivity{
private final static String TAG=MainActivity.class.getSimpleName();
私有EditText mEditTextValue1=null;
私有EditText mEditTextValue2=null;
私有按钮MbutOnStartAsyncTask=null;
私有rx.Observable mAsyncObservable=null;
私有TextView mTextViewProcessedValue=null;
订户mAsyncSubscriber=新订户(){
@凌驾
未完成的公共无效(){
Log.w(标记为“未完成(mAsyncSubscriber)”;
}
@凌驾
公共无效申报人(可丢弃的e){
Log.w(标签“onError(mAsyncSubscriber)”;
}
@凌驾
public void onNext(字符串下一步){
Log.w(标签“onNext(mAsyncSubscriber)”;
mTextViewProcessedValue.setText();
}
};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
}
私有void initViews(){
mEditTextValue1=(EditText)findViewById(R.id.editTextValue1);
mEditTextValue2=(EditText)findViewById(R.id.editTextValue2);
mButtonStartAsyncTask=(按钮)findViewById(R.id.buttonStartAsyncTask);
MbutOnStartAsyncTask.setOnClickListener(新视图.OnClickListener()){
@凌驾
公共void onClick(视图v){
Integer value1=Integer.valueOf(mEditTextValue1.getText().toString());
Integer value2=Integer.valueOf(mEditTextValue2.getText().toString());
mAsyncObservable=rx.Observable.just(值1,值2)
.delay(3,TimeUnit.SECONDS,AndroidSchedulers.mainThread())
.doOnNext(项目->{
mTextViewProcessedValue=(TextView)findViewById(R.id.textViewProcessedValue);
返回值1+“,”+值2;
})
.doOnCompleted(新操作0(){
@凌驾
公开作废通知(){
Log.w(标记“doOnCompleted”);
}
})
//.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())

.subscribe((Action1我也是RxJava新手……这可能是您想要的

io.reactivex.Observable.range(1, 100).subscribe(new DisposableObserver<Integer>() {
        List<Integer> list = new ArrayList<>(2);

        @Override
        public void onNext(Integer integer) {
            list.add(integer);
            if (list.size() % 2 == 0) {
                Log.i(TAG, "onNext: couple int :" + list.get(0) + " ," + list.get(1));
                list.clear();
            }
        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onComplete() {

        }
    });
io.reactivex.Observable.range(1100).subscribe(新的DisposableObserver(){
列表=新的ArrayList(2);
@凌驾
public void onNext(整数){
list.add(整数);
if(list.size()%2==0){
Log.i(标记“onNext:coupint:”+list.get(0)+“,“+list.get(1));
list.clear();
}
}
@凌驾
公共无效申报人(可丢弃的e){
}
@凌驾
未完成的公共空间(){
}
});
如果要同时发出两个值,可以发出数组、列表或Pojo

使用示例:

io.reactivex.Observable s1=io.reactivex.Observable.range(1100);
io.reactivex.Observable s2=io.reactivex.Observable.range(-100100);
io.reactivex.Observable.zip(s1,s2,新的双函数(){
@凌驾
公共字符串apply(整数i1、整数i2)引发异常{
返回i1+“,”+i2;
}})
.subscribe(System.out::println);

我也是RxJava新手……这可能是您想要的

io.reactivex.Observable.range(1, 100).subscribe(new DisposableObserver<Integer>() {
        List<Integer> list = new ArrayList<>(2);

        @Override
        public void onNext(Integer integer) {
            list.add(integer);
            if (list.size() % 2 == 0) {
                Log.i(TAG, "onNext: couple int :" + list.get(0) + " ," + list.get(1));
                list.clear();
            }
        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onComplete() {

        }
    });
io.reactivex.Observable.range(1100).subscribe(新的DisposableObserver(){
列表=新的ArrayList(2);
@凌驾
public void onNext(整数){
list.add(整数);
if(list.size()%2==0){
Log.i(标记“onNext:coupint:”+list.get(0)+“,“+list.get(1));
list.clear();
}
}
@凌驾
公共无效申报人(可丢弃的e){
}
@凌驾
未完成的公共空间(){
}
});
如果要同时发出两个值,可以发出数组、列表或Pojo

使用示例:

io.reactivex.Observable s1=io.reactivex.Observable.range(1100);
io.reactivex.Observable s2=io.reactivex.Observable.range(-100100);
io.reactivex.Observable.zip(s1,s2,新的双函数(){
@凌驾
公共字符串apply(整数i1、整数i2)引发异常{
返回i1+“,”+i2;
}})
.subscribe(System.out::println);

您想要使用的运算符实际上取决于您将拥有多少数字、需要多少产品以及您想要对最终答案做什么。在本例中,我们将使用

将函数应用于可观察的、连续的和连续的值发出的每个项

上面的代码将发出一次:
“{value1},{value2}”

如果您添加第三个值,它将发出两次:
“{value1},{value2}”
“{value1},{value2},{value3}”

您想要使用的运算符实际上取决于您将拥有多少个数字、需要多少个产品以及您想要对最终答案做什么

将函数应用于可观察的、连续的和连续的值发出的每个项

上面的代码将发出一次:
“{value1},{value2}”

如果您添加第三个值,它将发出两次:
“{value1},{value2}”
“{value1},{value2},{value3}”

查看代码您试图实现的是从按钮上的两个字段中读取数据,然后将它们发出以观察
Observable.just(value1, value2)
    .delay(3, TimeUnit.SECONDS, AndroidSchedulers.mainThread())
    .scan("", (string, integer) -> string + "," + integer)
       RxView.clicks(button)
            .map(event -> {
                Integer value1 = Integer.valueOf(mEditTextValue1.getText().toString());
                Integer value2 = Integer.valueOf(mEditTextValue2.getText().toString());
                return value1 + "," + value2;
            })                
            .subscribe(combinedIntegers ->
                    mTextViewProcessedValue.setText(combinedIntegers));