我对 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 casereturn isdownload.get();}
1 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
lambda 不是那里的问题。
调用getDownloads()
是异步的。因此,isDowloaded()
调用该方法的方法不应返回 a boolean
,因为它不知道处理何时完成。
它应该是一种void
方法。主要的 api 功能之一Fetch
是在后台下载。
所以你必须实现一个回调来执行后处理。
2种可能性:
实施并添加一个
FetchListener
.在异步调用返回后执行后处理。
例如 :
MyApplication.getInstance().getFetch().getDownloads(downloads -> {
downloadList.set(downloads);
for (int i = 0; i < downloadList.get().size(); i++) {
//...
}
// ... DO your post processing here
});
添加回答
举报
0/150
提交
取消