2017-06-22 24 views
0

在android上,我正在使用请求数据库并尝试将我的数据库更改上载到服务器。为了达到同样的,我运行下面的逻辑requery db&rxjava observableResult多次调用后续函数

Scheduler sub2 = Schedulers.newThread(); 
Scheduler ob2 = Schedulers.newThread(); 
data.select(Broadcaster.class) 
      .where(Broadcaster.IS_DIRTY.eq(true)) 
      .get() 
      .observableResult() 
      .subscribeOn(sub2) 
      .observeOn(ob2) 
      .flatMap(broadcasters->broadcasters.observable()) 
      .flatMap(broadcasters->Backend.getInstance() 
        .uploadBroadcaster(broadcasters) 
        .onExceptionResumeNext(Observable.empty())) 
      .flatMapSingle(broadcaster -> markUploaded(broadcaster)) 
      .doOnError(t->Log.e(TAG,"Error uploading ",t)) 
      .subscribe(); 

但是,每改变uploadBroadcaster被称为多次(4-10次)使用相同的数据。 我在这里做错了什么。

+0

每个'onNext()'都会调用'flatMap()',所以它依赖于上游Observable发射,它可能发射的不止是单个项目,因此你多次调用'uploadBroadcaster'。 '.observableResult()'和'broadcasters.observable()'做了什么? – yosriz

+0

更新了问题。我在android上使用了重新查询数据库。 .observableResult将响应的结果作为reactiveResult发送给db,而.observable将reactiveResult转换为observable –

回答

0

错误是我的。这段代码被多次调用。所以订阅发生多次。