Android 如何提供两个整数值并发出一个字符串
我正在学习RxAndroid api,所以我创建了一个示例,其中输入是两个整数,输出应该是包含这些整数的字符串。例如 对于1和2,输出应为“1,2”,依此类推 在下面的代码是我试图实现我的计划,但我需要指导和帮助请 代码: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
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));