滑动(Glide):onError回调函数

20

我正在从 Picasso 切换到 Glide。除了找不到获取错误回调的方法外,一切都运行良好。我想要检索位图、传递它并从中生成 Android 调色板。此外,虽然可以为加载调用提供 errorDrawable,但在使用 SimpleTarget 时,它不会出现在 onResourceReady 中。

在 Picasso 中,我是这样做的:

target = new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                //handle Bitmap, generate Palette etc. 
            }

            @Override
            public void onBitmapFailed(final Drawable errorDrawable) {
                // use errorDrawable to generate Palette
            }

            @Override
            public void onPrepareLoad(final Drawable placeHolderDrawable) {
            }
        };
        int width =  (int) DisplayUnitsConverter.dpToPx(this, 120);
        int height =  (int) DisplayUnitsConverter.dpToPx(this, 40);
        Picasso.with(this).load(config.getPathToLogo()).resize(width, height).error(errorDrawableId).into(target);

我的滑翔代码看起来像这样:

Glide.with(context)
    .load(config.getPathToLogo())
    .asBitmap()
    .into(new SimpleTarget<Bitmap>(width, height) {
         @Override
         public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
             //handle Bitmap, generate Palette etc. 
         }
    });

谢谢。

2个回答

32

针对所有遇到同样问题的人 - 你需要使用监听器方法。例如:

   Glide.with(activity)
            .load(getPhoto().getUrl())
            .apply(
                    new RequestOptions()
                            .error(R.drawable.icon_placeholder)
                            .centerCrop()
            )
            .listener(new RequestListener<Drawable>() {
                @Override
                public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                 //on load failed
                    return false;
                }

                @Override
                public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                    //on load success
                    return false;
                }
            })
            .transition(withCrossFade())
            .into(view);

2
2022年仍然有效。 - CoolMind

10

您正在使用实现了接口TargetSimpleTarget,该接口定义了方法onLoadFailed,因此您只需要执行以下操作:

Glide.with(context)
    .load(config.getPathToLogo())
    .asBitmap()
    .into(new SimpleTarget<Bitmap>(width, height) {
         @Override
         public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
             //handle Bitmap, generate Palette etc. 
         }

         @Override
         public void onLoadFailed(Exception e, Drawable errorDrawable) {
             // Do something.
         }
    });

这个解释应该成为默认的git自述文件部分,因为“onLoadFailed”是如此基本的错误处理。谢谢! - carl
也许你正在使用4.0.0-RC0?尝试使用3.8.0。 - Clint
没有onLoadFailed(Exception e, Drawable errorDrawable)这个方法,它包含了Exception。 - Rizwan Ahmed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接