[英]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.