如何等待在android上运行observable完成?

如何等待在android上运行observable完成?,android,rx-java,system.reactive,observable,Android,Rx Java,System.reactive,Observable,我有dataModule,它以某种方式提供了DataModel static Single<DataModel> loadData(); 此外,活动还有几个带有回调的UI按钮,这些按钮也需要数据 public void onViewCreated(View v..) { v.findViewById(R.id..).setOnClickListener(this::updateViewX) v.findViewById(R.id..).setOnClickListene

我有dataModule,它以某种方式提供了DataModel

static Single<DataModel> loadData();
此外,活动还有几个带有回调的UI按钮,这些按钮也需要数据

public void onViewCreated(View v..) {
   v.findViewById(R.id..).setOnClickListener(this::updateViewX)
   v.findViewById(R.id..).setOnClickListener(this::updateViewX)
}


void updateViewX() {
   DataModel.loadData().doOnSuccess(dataModel -> /** somehow updating ui **/)
           .subscribe()
}

void updateViewY() {
   DataModel.loadData().doOnSuccess(dataModel -> /** somehow updating ui **/)
           .subscribe()
}
它可以工作,但在这个代码段中,每次单击按钮都会加载相同的数据。 我想要的是:

  • 在onCreate中仅加载一次数据
  • 等待它加载,然后执行回调(若按下按钮-回调应等待数据)
  • 请帮我提一些想法

    DataModel.loadData().subscribe({dataModel -> /** somehow updating ui **/});
    
    您需要使用
    Observable
    Action
    subscribe()
    方法进行订阅


    您需要使用
    Observable
    Action
    subscribe()
    方法进行订阅。

    我认为在subscribe或doOnSuccess中处理事件没有太大区别。不幸的是,每次用户按下按钮时,它们都会导致loadData的执行。然后,您可以隐藏按钮,直到数据绑定。装订好后,展示给大家看。或禁用/启用它们。或者,如果您使用
    RxBinding
    创建被动视图,则可以使用
    combileLatest()
    。我想要的是挂起的行为:如果在数据加载完成之前按下按钮,则按钮的回调将延迟,并仅在成功加载数据后执行。谢谢,我将研究CombineRelatest我认为在subscribe或doOnSuccess中处理事件没有太大区别。不幸的是,每次用户按下按钮时,它们都会导致loadData的执行。然后,您可以隐藏按钮,直到数据绑定。装订好后,展示给大家看。或禁用/启用它们。或者,如果您使用
    RxBinding
    创建被动视图,您可以使用
    combileLatest()
    。我想要的是挂起的行为:如果在数据加载完成之前按下按钮,则按钮的回调将延迟,并仅在成功加载数据后执行谢谢,我将研究combineLatest
    DataModel.loadData().subscribe({dataModel -> /** somehow updating ui **/});