Glide 4.1.1中无法解析GlideApp

4

经过阅读大量关于同一问题的论坛帖子,我仍然无法解决GlideApp错误。它说它无法解析。以下是屏幕截图:

enter image description here

这是使用上述详细信息的Java类

enter image description here

我的build.gradle文件已包含:

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

我有一个代码如下的类:

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

@GlideModule
public final class CustomAppGlideModule extends AppGlideModule {
}

我正在使用这个来请求:

当我使用Glide.with时,它会报错:

enter image description here

但仍然无法解决问题。


只使用Glide而不是GlideApp。 - Quick learner
然后它在“with”中给我一个错误,如果我只使用Glide。 - Bir Nepali
请检查我的答案 - Quick learner
@Quicklearner,请检查一下我在问题中是否包含了所有细节。 - Bir Nepali
3个回答

4

尝试使用

  implementation 'com.github.bumptech.glide:glide:4.8.0'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

演示

@GlideModule
public class FlickrGlideModule extends AppGlideModule {

  @Override
  public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
    super.applyOptions(context, builder);
    builder.setDefaultRequestOptions(new RequestOptions().format(DecodeFormat.PREFER_ARGB_8888));
  }

  @Override
  public void registerComponents(@NonNull Context context, @NonNull Glide glide,
      @NonNull Registry registry) {
    registry.append(Photo.class, InputStream.class, new FlickrModelLoader.Factory());
  }

  // Disable manifest parsing to avoid adding similar modules twice.
  @Override
  public boolean isManifestParsingEnabled() {
    return false;
  }
}

阅读AppGlideModule

顺便提一下

您的loadImage方法将会是:

public static void loadImage(Context ctx,RequestOptions glideRequests, String url, ImageView imageView) {
        loadImage(ctx,glideRequests, url, imageView, DiskCacheStrategy.ALL);
    }

    public static void loadImage(Context ctx,RequestOptions glideRequests, String url, ImageView imageView, DiskCacheStrategy diskCacheStrategy) {

                 Glide.with(ctx)
                    .applyDefaultRequestOptions(requestOptions.placeholder(R.drawable.ic_stub).error(R.drawable.ic_stub))
                    .asBitmap()
                    .load(url).into(imageView);
    }

然后

ImageUtil.loadImage(context,options,obj.getPhotoUrl(),avatarImageView);

1
谢谢提供这么好的信息,但我仍然无法解决问题。几乎所有项目都已完成,但只有这个错误我无法解决。这是整个项目,GlideApp模块在util中https://github.com/BlueYeti1881/Physicscircle - Bir Nepali
1
如果我使用GlideApp会显示错误,而当我使用Glide.with时也会显示错误...你能指导我吗?如果需要,我已经打开了TeamViewer...我很乐意与您分享我的电脑..!! - Bir Nepali
1
@BirNepali 已经理解了。请添加第一个参数 RequestOptions requestOptions - IntelliJ Amiya
1
@BirNepali 哎呀!你为什么删除了 RequestOptions options = new RequestOptions(); - IntelliJ Amiya
1
@BirNepali 你可以删除这个方法,因为它没有被使用。public static void loadImage(GlideRequests glideRequests, String url, ImageView imageView, RequestListener<Drawable> listener) { glideRequests.load(url) .error(R.drawable.ic_stub) .listener(listener) .diskCacheStrategy(DiskCacheStrategy.DATA) .into(imageView); } - IntelliJ Amiya
显示剩余8条评论

1
尝试一下:

导入Glide,在gradle中添加以下内容

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

然后使用这段代码。
Glide.with(context)
        .load(url)
        .placeholder(R.drawable.ic_male)
        .error(R.drawable.imagenotfound)
        .listener(new RequestListener<String, GlideDrawable>() {
            @Override
            public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                // log exception
                Log.e("TAG", handle error case", e);
                return false; 
            }

            @Override
            public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                 Log.e("TAG", handle success case here", e);
                return false;
            }
        })
        .into(avatarImageView);

我已经编辑了我的问题,其中我有另一个类来接收请求。每当我更改任何变量时,下一个类都会要求我更改类的签名。我已在我的问题上方添加了它。 - Bir Nepali
我的回答有帮助到你吗? - Quick learner
不行,它还是显示错误...!! 你能否通过Teamviewer帮助我一下..我很愿意与你分享我的电脑..!! 几乎项目已经完成,但只有这一个问题没有解决..非常感激你。 - Bir Nepali
亲爱的,我现在无法使用TeamViewer,但稍后可以。无论如何,您可以在这里分享您的错误。 - Quick learner
我明白了,你不需要使用ImageUtil.loadImage方法,你可以轻松地使用Glide.with(context).load(url).into(avatarImageView); - Quick learner
显示剩余3条评论

1

看起来有很棒的讨论。别担心,我有解决方案。

按照以下步骤操作:

添加依赖项如下(我使用了最新版本)

implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

创建包(因为我总是使用结构化代码)myglide,并复制/粘贴以下类:

@GlideModule
public class SampleGlideModule extends AppGlideModule {
    @Override
    public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
        super.applyOptions(context, builder);
    }
}

现在您可以按下CTRL+F9,或者单击Build菜单中的Make Project选项。它将自动生成一个文件(您可以通过按住CTRL并悬停在文件中的ClassName上查看)
final class GeneratedAppGlideModuleImpl extends GeneratedAppGlideModule {
  private final SampleGlideModule appGlideModule;
  ....
}

现在你可以非常容易地使用GlideApp类。
如果出现任何错误,请随时与我联系。
希望这对你有所帮助。我一如既往地喜爱Glide。 <3

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