Android 如何在emitter.onNext()处于异步循环时调用emitter.onComplete()

Android 如何在emitter.onNext()处于异步循环时调用emitter.onComplete(),android,kotlin,reactive-programming,rx-java2,rx-kotlin2,Android,Kotlin,Reactive Programming,Rx Java2,Rx Kotlin2,我有一个异步调用,我在其中放置了emitter.onNext()回调侦听器。这个异步调用在for-in中(我知道列表大小)。我想在onNext()中发出最后一个元素时调用onComplete() 由于计数是异步调用,因此不会以正确的方式递增,并且永远不会调用onComplete() 处理这种情况的正确方法是什么?我需要onComplete来显示视图并删除加载/进度条。我找到了解决方案 使用AtomicInteger,如下所示: var counter = AtomicInteger(0) f

我有一个异步调用,我在其中放置了emitter.onNext()回调侦听器。这个异步调用在for-in中(我知道列表大小)。我想在onNext()中发出最后一个元素时调用onComplete()

由于计数是异步调用,因此不会以正确的方式递增,并且永远不会调用onComplete()

处理这种情况的正确方法是什么?我需要onComplete来显示视图并删除加载/进度条。

我找到了解决方案

使用AtomicInteger,如下所示:

 var counter = AtomicInteger(0)
 for (anItem in itemList) {

   eventsQuery.get()
        .addOnCompleteListener { task ->
            if (task.isComplete) {

                counter.incrementAndGet()
                emitter.onNext(myItemFromTask)

                if(counter == itemList.size){
                      emitter.onComplete()
                }
            }
       }
}
如果有人找到更好或更优雅的解决方案,我们将不胜感激

 var counter = AtomicInteger(0)
 for (anItem in itemList) {

   eventsQuery.get()
        .addOnCompleteListener { task ->
            if (task.isComplete) {

                counter.incrementAndGet()
                emitter.onNext(myItemFromTask)

                if(counter == itemList.size){
                      emitter.onComplete()
                }
            }
       }
}