我正在学习如何使用Observable.create()。因此,我创建了下面发布的例子。但当我运行应用程序的时候。单击按钮,调用()方法中的log语句永远不会显示,而.create()中的log语句将立即显示。我预期调用()中的log语句会显示出来,但它没有显示。
请让我知道为什么下面的日志语句Log.i(标签,"++++++++++ STARTED +++++++++");
从来没有展示过。
码
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private Button btnStart = null;
private TextView tvText = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.btnStart = (Button) findViewById(R.id.btnStart);
this.tvText = (TextView) findViewById(R.id.tvText);
Observable.fromCallable(new Callable<Object>() {
@Override
public Object call() throws Exception {
Log.i(TAG, "++++++++++ STARTED +++++++++");
Thread.sleep(5000);
return null;
}
})
.create(e -> {
Log.i(TAG, "++++++++++ CREATED +++++++++");
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
e.onNext(i[0]++);
}
});
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Object>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull Object o) {
Log.i(TAG, "o: " + o.toString());
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
}发布于 2018-08-24 17:31:39
当您调用create时,您从可调用的创建中创建的可观察到的流实际上被丢弃了,创建了一个您实际订阅的新流。
https://stackoverflow.com/questions/51558611
复制相似问题