永远不会调用call()

时间:2018-07-27 13:05:59

标签: rx-java rx-java2 rx-android

我正在学习如何使用Observable.create()。所以我创建了以下发布的示例。但是当我运行该应用程序时。然后单击按钮中的日志语句 当.create()中的log语句立即显示时,永远不会显示call()方法。 我希望显示call()中的log语句,但是没有。

请让我知道为什么下面的日志语句                     Log.i(TAG,“ ++++++++++ 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() {

                }
            });
}

1 个答案:

答案 0 :(得分:1)

您从可调用对象创建的可观察对象实际上在调用create时会被丢弃,后者会创建您实际订阅的新流。

  • 您可以创建一个流图像
  • 然后您创建另一个流
  • 但是您的订阅仅适用于第二个