首页 > 解决方案 > Android Glide:等待未来并加载

问题描述

我有一个返回的 api ListenableFuture<Uri>

如何让 glide 等待未来然后加载 uri?

我在网上寻找了一些帮助,但找不到确切的案例。

我不想自己为未来添加一个监听器,然后将实际的 uri 值传递给Glide.load并想做类似的事情:

 Glide.with(context)
                .asDrawable()
                .load(uriFuture)
                .transform(Drawable.class, getBackgroundTransformation())
                .into(albumArtView);

基本上,当 future 完成时,glide 应该开始加载 uri。

标签: androidandroid-glide

解决方案


使用下面的代码

@BindingAdapter({"bind:src_url", "bind:progress"})
public static void setChatSrcUrl(final ImageView view, String sourceUrl, final ProgressBar pb) {
    if (sourceUrl == null) {
        view.setImageResource(R.drawable.gray_wifi);
        pb.setVisibility(View.GONE);
    } else {
        pb.setVisibility(View.VISIBLE);
        Glide.with(view.getContext())
                .asBitmap()
                .load(sourceUrl)
                .override(250, 400)
                .fitCenter()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .error(R.drawable.gray_wifi)
                .listener(new RequestListener<Bitmap>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
                        pb.setVisibility(View.GONE);
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
                        pb.setVisibility(View.GONE);
                        return false;
                    }
                })
                .into(view);
    }
}

推荐阅读