在循环中,我需要多次调用callback方法。我怎么知道什么时候完成了?
@Override
public void onObjectsMustBeParsed(String parsableObjects) {
String[] parsedObjects = parsableObjects.split(",");
for (String parsedObject : parsedObjects){
loadObject(parsedObject, new LoadObjectCallback() {
@Override
public void onObjectLoaded(Object object) {
//Object Loaded
saveObject(object, new SaveObjectCallback() {
@Override
public void onObjectSaved() {
// Object saved
}
@Override
public void onError() {
// Object not saved
}
});
}
@Override
public void onError(Throwable throwable) {
// Object not Loaded
}
});
}
}
// => do something when all processing of parsed-objects are finished
// do something if all is ok
// do other thing if partially ok
注意:为了操作我的数据,我使用具有本地和远程数据源的存储库。这段代码是存储库的一部分
添加一个volatile整数,表示正在运行的任务数量。启动任务时递增。在onObjectLoaded或onObjectSaved中进行减量。然后在每次递减之后检查任务计数器是否为空。
与注释类似,但使用AtomicInteger代替:
AtomicInteger countDownLatch = null;
@Override
public void onObjectsMustBeParsed(String parsableObjects) {
String[] parsedObjects = parsableObjects.split(",");
countDownLatch = new AtomicInteger(parsedObjects.length);
for (String parsedObject : parsedObjects){
loadObject(parsedObject, new LoadObjectCallback() {
@Override
public void onObjectLoaded(Object object) {
//Object Loaded
saveObject(object, new SaveObjectCallback() {
@Override
public void onObjectSaved() {
// Object saved
int value = countDownLatch.decrementAndGet();
if ( value == 0 ) {
// we are done
}
}
@Override
public void onError() {
// Object not saved
int value = countDownLatch.decrementAndGet();
if ( value == 0 ) {
// we are done
}
}
});
}
@Override
public void onError(Throwable throwable) {
// Object not Loaded
}
});
}
}