java - 使用 Glide 加载 url 的数组列表
问题描述
我正在尝试加载 URL 的 ArrayList 并使用滑行从它们中获取位图,我的代码在下面不起作用,Toast 向我显示0作为消息。
@SuppressLint("CheckResult")
public void getBitmapFromUrls() {
final ArrayList<Bitmap> arrayBitmaps = new ArrayList<>();
RequestOptions requestOptions = new RequestOptions();
requestOptions.diskCacheStrategy(DiskCacheStrategy.ALL).dontTransform();
for (int i = 0; i < listItems.size(); i++) {
Glide.with(getActivity())
.asBitmap()
.apply(requestOptions)
.load(listItems.get(i).getImgUrl())
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
arrayBitmaps.add(resource);
}
});
}
Toast.makeText(getActivity(), "" + arrayBitmaps.size(), Toast.LENGTH_SHORT).show();
}
解决方案
当您调用 Glide 加载图像时,它会产生一些后台线程来执行工作(从服务器加载图像)。同时,您在 UI 线程上显示 Toast 以显示位图列表的大小。但是当时后台线程可能正在处理中并且还没有返回结果。所以位图列表的大小为0。
您可以将代码更改为:
for (int i = 0; i < listItems.size(); i++) {
Glide.with(getActivity())
.asBitmap()
.apply(requestOptions)
.load(listItems.get(i).getImgUrl())
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
arrayBitmaps.add(resource);
// All images has been loaded and add to bitmap list as well.
if (arrayBitmaps.size == listItems.size()) {
Toast.makeText(getActivity(), "" + arrayBitmaps.size(), Toast.LENGTH_SHORT).show();
}
}
});
}
推荐阅读
- ios - 将航点任务上传到 Phantom 4 时出错
- javascript - 我可以在 for 循环中使用 if 语句吗
- python - 在 Python 上实现深度搜索策略时出错
- r - 通过 cumsum 获取数字序列
- ckeditor - CKEditor 4从word粘贴时将换行符转换为段落
- javascript - Vue.js 组件未显示在 Swal.fire html 中
- javascript - 在 Javascript 中将日期格式化为 DD-MMM-YYYY
- tkinter - 一个 GUI Tkinter 中两个条目的浏览按钮
- laravel - 在 laravel 中保存 OneToOne 关系
- ruby-on-rails-6 - 我应该如何正确设置这些关联?