使用Glide加载网址的arraylist

时间:2018-09-11 00:23:46

标签: java android arraylist bitmap android-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();

    }

1 个答案:

答案 0 :(得分:2)

调用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();
                    }
                }
            });
}