Glide-4.0.0缺少占位符,错误,GlideApp并且无法解析其方法占位符,错误

时间:2017-08-03 10:35:50

标签: android android-layout android-glide

我想使用Glide Android库下载图片并在ImageView显示。

在之前的版本中,我们使用了:

Glide.with(mContext).load(imgUrl)
                .thumbnail(0.5f)
                .placeholder(R.drawable.PLACEHOLDER_IMAGE_NAME)
                .error(R.drawable.ERROR_IMAGE_NAME)
                .crossFade()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(imageView);

但我看过Glide文档:

  

它表示使用GlideApp.with()代替Glide.with()

我担心的是缺少占位符,错误,GlideApp和其他选项。

我正在使用

 compile 'com.github.bumptech.glide:glide:4.0.0'

我在哪里做错了?参考here

GlideApp.with()是如何使用的?

API与AppGlideModule在同一个包中生成,默认情况下名为GlideApp。应用程序可以通过使用GlideApp.with()而不是Glide.with()

启动所有加载来使用API
GlideApp.with(fragment)
   .load(myUrl)
   .placeholder(placeholder)
   .fitCenter()
   .into(imageView);

8 个答案:

答案 0 :(得分:174)

尝试使用 RequestOptions

RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(R.drawable.ic_placeholder);
requestOptions.error(R.drawable.ic_error);

Glide.with(context)
     .setDefaultRequestOptions(requestOptions)
     .load(url).into(holder.imageView);

修改

如果.setDefaultRequestOptions(requestOptions)不起作用,请使用.apply(requestOptions)

Glide.with(MainActivity.this)
            .load(url)
            .apply(requestOptions)
            .into(imageview);
 // or this
 Glide.with(MainActivity.this)
            .load(url)
            .apply(new RequestOptions().placeholder(R.drawable.booked_circle).error(R.drawable.booked_circle))
            .into(imageview);

 // or this
 Glide.with(MainActivity.this)
            .load(url)
            .apply(RequestOptions.placeholderOf(R.drawable.booked_circle).error(R.drawable.))
            .into(imageview);

编辑2奖金

以下是Glide-4的其他一些变化

答案 1 :(得分:25)

如果你使用Glide包依赖项compile 'com.github.bumptech.glide:glide:3.7.0',那么使用应该是使用下面的代码:

GlideApp
    .with(your context)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.loading_image)
    .error(R.drawable.error_image)
    .into(myImageView);
  

注意:the documentation中一样,

     

圆形图片:CircleImageView / CircularImageView / RoundedImageView是   已知与TransitionDrawable(.crossFade()有问题   .thumbnail()或.placeholder())和动画GIF,使用   BitmapTransformation(.circleCrop()将在v4中提供)或   .dontAnimate()来解决问题。

最新更新版本compile com.github.bumptech.glide:glide:4.1.1然后使用应该是使用以下代码:

RequestOptions options = new RequestOptions()
                    .centerCrop()
                    .placeholder(R.drawable.default_avatar)
                    .error(R.drawable.default_avatar)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .priority(Priority.HIGH)
                    .dontAnimate()
                    .dontTransform();

Glide.with(this)
     .load(url)
     .apply(options)
     .into(imageView);

查看 glide, bug fixes and features 的最新版本。

答案 2 :(得分:10)

如果您想使用GlideApp,您必须添加到dependencies注释处理器,如屏幕截图所示:

How to add GlideApp to your project

然后在您的应用程序中包含AppGlideModule实现:

@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}

不要忘记@GlideModule注释。 然后你需要Build项目。 <{1}}将自动生成。

答案 3 :(得分:6)

依赖关系:

compile 'com.github.bumptech.glide:glide:4.1.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.1.1'

添加适当注释的AppGlideModule实现:

import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;

@GlideModule
public final class MyAppGlideModule extends AppGlideModule{}

此外,如果您使用过jack选项,为了避免以下类似错误,您需要使用Android Studio 3.0.0预览。

  

错误:任务&#39;:app:transformJackWithJackForDebug&#39;执行失败。   com.android.jack.ir.JNodeInternalError:java.lang.Exception:java.lang.AssertionError:尚未实现

答案 4 :(得分:5)

我们也不需要使用RequestOptions。

生成的API添加了一个GlideApp类,可以访问RequestBuilder和RequestOptions子类。 RequestOptions子类包含RequestOptions中的所有方法以及GlideExtensions中定义的所有方法。 RequestBuilder子类提供对生成的RequestOptions子类中所有方法的访问,而无需使用apply:

使用Glide : -

没有生成API的请求可能如下所示:

Glide.with(fragment)
    .load(url)
    .apply(centerCropTransform()
        .placeholder(R.drawable.placeholder)
        .error(R.drawable.error)
        .priority(Priority.HIGH))
    .into(imageView);

使用GlideApp : -

使用生成的API,可以内联RequestOptions调用:

GlideApp.with(fragment)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .priority(Priority.HIGH)
    .into(imageView);

您仍然可以使用生成的RequestOptions子类将同一组选项应用于多个加载,但在大多数情况下生成的RequestBuilder子类可能更方便。

答案 5 :(得分:4)

工作

Glide.with(context!!)
     .load(user.profileImage)
     .apply (RequestOptions.placeholderOf(R.drawable.dummy_user))
     .into(edit_profile_image)

答案 6 :(得分:1)

RequestOptions options = new RequestOptions()
            .placeholder(R.drawable.null_image_profile)
            .error(R.drawable.null_image_profile);
    //.centerCrop()
    //.diskCacheStrategy(DiskCacheStrategy.ALL)
    //.priority(Priority.HIGH);

    Glide.with(context).load(imageUrl)
            .apply(options)
            .into(profileImage);

答案 7 :(得分:0)

如果您想在应用程序中的所有地方使用通用的占位符,则可以这样操作:

在我们从 Glide v4 创建 GlideModule 时,您可以在您的项目中复制/粘贴此类,以便能够使用 GlideApp 类(有关更多步骤-follow this)

@GlideModule
public class SampleGlideModule extends AppGlideModule {
    @Override
    public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
        super.applyOptions(context, builder);
        builder.setDefaultRequestOptions(new RequestOptions().placeholder(R.drawable.logo).error(R.drawable.logo));
    }

    @Override
    public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
        super.registerComponents(context, glide, registry);
    }
}

您可以在此处为所有请求选项设置为默认

通过创建此类,您无需将.placeholderGlideApp一起使用,它将被自动应用。