[英]how to wait for lambda expression finish
我对lambda表达有疑问; 我在返回类型方法中使用了lambda表达式,但return isDownloaded.get()
在lambda表达式之前执行。 我如何等待lambda完成?
public boolean isDowloaded(int id) {
AtomicReference<Boolean> isdownload = new AtomicReference<>(false);
AtomicReference<List<Download>> downloadList = new AtomicReference<>();
MyApplication.getInstance().getFetch().getDownloads(downloads -> {
downloadList.set(downloads);
for (int i = 0; i < downloadList.get().size(); i++) {
if (downloadList.get().get(i).getExtras().getString("id","").equals(String.valueOf(id)) ) {
PlayerConstants.SONG_NUM = i;
isdownload.set(true);
}
}
});
// always return false in this case
return isdownload.get();
}
lambda并不是问题所在。
getDownloads()
调用是异步的。 因此,调用的isDowloaded()
方法不应返回boolean
因为它不知道何时完成处理。
它应该是一个void
方法。 Fetch
api的主要功能之一是在后台下载。
因此,您必须实现一个回调以执行后处理。
2种可能性:
FetchListener
。 例如 :
MyApplication.getInstance().getFetch().getDownloads(downloads -> {
downloadList.set(downloads);
for (int i = 0; i < downloadList.get().size(); i++) {
//...
}
// ... DO your post processing here
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.