无法使用 Glide 加载图像

Unable to load image using Glide

我在我的 android 项目中使用 Glide v4。这是我使用 listener 实现的。但这并没有给我任何回调:

Glide.with(HomeScreenActivity.this).load(url).listener(new RequestListener<Drawable>() {
    @Override
    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
        e.printStackTrace();
        videoCard_view.setVisibility(View.GONE);
        video_linearlayout.setVisibility(View.GONE);
        fetchSpecificQuoteContentType1(HomeScreenActivity.this, treatmentclient, "motivationalQuotes", strGender, motivations, quote_TextView, quote_ImageView, quotes_cardView);
        return false;
    }

    @Override
    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
        Log.e(TAG,"Video Image loaded");
        videoCard_view.setVisibility(View.VISIBLE);
        video_linearlayout.setVisibility(View.VISIBLE);
        fetchSpecificQuoteContentType1(HomeScreenActivity.this, treatmentclient, "motivationalQuotes", strGender, motivations, quote_TextView, quote_ImageView, quotes_cardView);
        return true;
    }
}).apply(options.centerCrop()).into(video_ImageView);

但是当我使用下面的样式时,它工作得很好。为什么会这样?:

Glide.with(HomeScreenActivity.this).load(url).apply(options.centerCrop()).into(new SimpleTarget<Drawable>() {
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
    Log.e(TAG,"video image loaded");
    video_ImageView.setImageDrawable(resource);
}
});

Return false 来自 onResourceReady 方法:

Glide.with(HomeScreenActivity.this).load(url).listener(new RequestListener<Drawable>() {
    @Override
    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
        e.printStackTrace();
        videoCard_view.setVisibility(View.GONE);
        video_linearlayout.setVisibility(View.GONE);
        fetchSpecificQuoteContentType1(HomeScreenActivity.this, treatmentclient, "motivationalQuotes", strGender, motivations, quote_TextView, quote_ImageView, quotes_cardView);
        return false;
    }

    @Override
    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
        Log.e(TAG,"Video Image loaded");
        videoCard_view.setVisibility(View.VISIBLE);
        video_linearlayout.setVisibility(View.VISIBLE);
        fetchSpecificQuoteContentType1(HomeScreenActivity.this, treatmentclient, "motivationalQuotes", strGender, motivations, quote_TextView, quote_ImageView, quotes_cardView);
        return false;
    }
}).apply(options.centerCrop()).into(video_ImageView);

如果video_ImageView或其父级是InvisibleGoneonLoadFailedonResourceReady回调将不会被调用,因为Glide在加载图像之前需要一个尺寸,不可见视图没有有效尺寸。或者,您可以使用 SimpleTarget 而不是 ImageView:

Glide.with(HomeScreenActivity.this).load(url).listener(new RequestListener<Drawable>() {
    @Override
    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
        e.printStackTrace();
        videoCard_view.setVisibility(View.GONE);
        video_linearlayout.setVisibility(View.GONE);
        fetchSpecificQuoteContentType1(HomeScreenActivity.this, treatmentclient, "motivationalQuotes", strGender, motivations, quote_TextView, quote_ImageView, quotes_cardView);
        return false;
    }

    @Override
    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
        Log.e(TAG,"Video Image loaded");
        videoCard_view.setVisibility(View.VISIBLE);
        video_linearlayout.setVisibility(View.VISIBLE);
        fetchSpecificQuoteContentType1(HomeScreenActivity.this, treatmentclient, "motivationalQuotes", strGender, motivations, quote_TextView, quote_ImageView, quotes_cardView);
        return false;
    }
}).apply(options.centerCrop())
  .into(new SimpleTarget<Drawable>() {
                    @Override
                    public void onResourceReady(@NonNull Drawable resource, 
                                                @Nullable Transition<? super Drawable> transition) {
                        video_ImageView.setImageDrawable(resource);
                    }
                });