59

I am trying to load an image using glide but somehow I can not load the image using glide. As it shows following error:

Failed to find GeneratedAppGlideModule. You should include an annotationProcessor compile dependency on com.github.bumptech.glide:compiler in your application and a @GlideModule annotated AppGlideModule implementation or LibraryGlideModules will be silently ignored.

I have reffered This solution too. But, I already have the updated verion of glide.

In my gradle, I have added

implementation 'com.github.bumptech.glide:glide:4.7.1'

and

annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'

Code

XML

<?xml version="1.0" encoding="utf-8"?>

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".view.SettingActivity">

    <data>
        <variable
            name="settingsViewModel"
            type="com.sevenbits.android.mvvmsample.viewmodel.SettingsViewModel"/>

    </data>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/splash_bg">

        <android.support.constraint.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <LinearLayout
                android:id="@+id/profile"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="20dp"
                android:background="@color/white"
                android:elevation="10dp"
                android:orientation="vertical"
                android:padding="5dp"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent">

                <de.hdodenhof.circleimageview.CircleImageView
                    android:layout_width="100dp"
                    android:layout_height="100dp"
                    android:layout_gravity="center"
                    android:layout_margin="10dp"
                    app:image_url="@{settingsViewModel.imageUrl}"
                    app:civ_border_width="2dp"
                    app:civ_border_color="@color/colorPrimary"/>

                  ...
            </LinearLayout>

    </android.support.constraint.ConstraintLayout>

</ScrollView>

CustomBindingAdapter

public class CustomBindingAdapter {

@BindingAdapter({"bind:image_url"})
public static void loadImage(ImageView imageView, String url) {

    RequestOptions requestOptions = new RequestOptions();
    requestOptions=requestOptions.placeholder(R.drawable.boy_32);

        Glide.with(imageView.getContext())
                .load(url)
                .apply(requestOptions)
                .into(imageView);
}
Riddhi Shah
  • 3,092
  • 5
  • 36
  • 56

9 Answers9

58

Finally, I found my answer here.

What I have done :

Step-1

I created an empty class named GlideApp

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

@GlideModule
public class GlideApp extends AppGlideModule {

}

Note: Don't forget to add annotation @GlideModule.

Step-2 After that, I build/rebuild the project and then, replaced Glide with GlideApp.and now no need to use RequestOptions.

public class CustomBindingAdapter {

    @BindingAdapter({"bind:image_url"})
    public static void loadImage(ImageView imageView, String url) {

//        RequestOptions requestOptions = new RequestOptions();
//        requestOptions=requestOptions.placeholder(R.drawable.boy_32);

        GlideApp.with(imageView.getContext())
                .load(url)
                .placeholder(R.drawable.boy_32)
                .into(imageView);

//            Glide.with(imageView.getContext())
//                    .load(url)
//                    .apply(requestOptions)
//                    .into(imageView);
    }
}

Edit: For androidx and Glide versin 4.9.0:

In my app's gradle.build:

implementation ("com.github.bumptech.glide:glide:4.9.0") {
    exclude group: "com.android.support"
}
annotationProcessor 'androidx.annotation:annotation:1.0.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
implementation ("com.github.bumptech.glide:glide:4.9.0@aar") {
    transitive = true
}

In my gradle.properties:

android.enableJetifier=true
android.useAndroidX=true

That's all.

Krodl
  • 3
  • 1
Riddhi Shah
  • 3,092
  • 5
  • 36
  • 56
  • 26
    Doesn't seem to work with Glide version 4.9.0. This causes error "cannot resolve method 'with' – ezaspi Jun 19 '19 at 21:15
  • 4
    @ezaspi if you are using Kotlin, you need to replace `annotationProcessor` by `kapt` in your build.gradle dependency. Remember to add `apply plugin: "kotlin-kapt"` too. Moreover, you are referencing your `AppGlideModule` implementation but you should use `GlideApp` instead, – Taynã Bonaldo Jul 04 '19 at 19:50
  • 4
    Not working for me With method not found tried all bellow solution. – ayman salah Sep 08 '19 at 20:02
45

Kotlin Solution:

Make sure you are adding the following in your gradle file (replace annotationProcessor with kapt source ):

repositories {
  mavenCentral()
  google()
}

dependencies {
    implementation 'com.github.bumptech.glide:glide:4.8.0'
    kapt 'com.github.bumptech.glide:compiler:4.8.0'
}

Add **AppGlideModule** implementation in your application [GlideSource][2] (You may override the default methods [overrideSource][3]):
import android.content.Context
import com.bumptech.glide.GlideBuilder
import com.bumptech.glide.annotation.GlideModule
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.module.AppGlideModule
import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.signature.ObjectKey

@GlideModule
class AppNameGlideModule : AppGlideModule() {

    override fun applyOptions(context: Context, builder: GlideBuilder) {
        super.applyOptions(context, builder)
        builder.apply { RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL) }
    }

}

While using glide, use **GlideApp** instead of **Glide**, example:
GlideApp.with(context)
            .load(url)
            .into(imageView)
Siamak
  • 1,689
  • 1
  • 17
  • 26
Arshak
  • 3,197
  • 1
  • 25
  • 33
  • 2
    @SpyZip Try rebuilding the app( Build > Rebuild Project) or Invalidate cache ( File > Invalidate Caches / Restart) – Arshak Mar 07 '19 at 08:51
  • @RafaelGuimarães Please check whether you have created an additional file which extends AppGlideModule – Arshak Apr 17 '19 at 06:43
  • @Arshak, i try to find in source with android studio tools, and nothing was found the solution to compile the code was rename the class to GlideApps, is that right? – Rafael Guimarães Apr 17 '19 at 21:09
  • 1
    @RafaelGuimarães No you shouldn’t name the class that extends AppGlideModule to GlideApp, i tried this and i got a compilation error, so instead rename AppNameGlideModule to whatever your apps name is appended by GlideModule(it’s not mandatory, but for understanding purpose), example: CalculatorGlideModule. After that, first build the project so that files can get generated and then run it. – Arshak Apr 18 '19 at 08:54
  • 2
    The "Duplicate Class" error will occur if you name the new class "GlideApp". You should name it something else, for example "MyGlideModule". The class GlideApp will be generated for you. – Per Christian Henden Oct 28 '19 at 10:33
  • @Arshak Your code disables caching(.signature(ObjectKey(System.currentTimeMillis().toShort()))) I guess. You should try simpler configs for public. – Siamak Jun 26 '21 at 07:35
  • 1
    @SiamakSiaSoft I saw your edit. It should work. Thanks! – Arshak Jun 28 '21 at 11:43
10

I have faced this issue with Glide:4.9.0 with AndroidX
solved it like this

In your gradle.properties
android.useAndroidX = true
android.enableJetifier=true

In your build.gradle
//Glide dependency implementation 'com.github.bumptech.glide:glide:4.9.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'

Then add your CustomGlideModule
@GlideModule public class CustomeGlideModule extends AppGlideModule {}

The final step generates the GlideModule
Build >> Make Project and you should see the generated module in your build folder

You Qi
  • 8,353
  • 8
  • 50
  • 68
Raed
  • 844
  • 11
  • 10
9

All above answer is True and work fine

but i noticed when use #placeholder and #error method the glide work fine with out build GlideModule class as mentioned above

Example : When use glide like this is not work and give must build GlideModule

Glide.with(this)
             .load(uri)
                .into(imageView);

and this is work fine

Glide.with(this).load(uri).placeholder(android.R.drawable.progress_indeterminate_horizontal).error(android.R.drawable.stat_notify_error).into(imageView);
Mahmoud Abu Alheja
  • 3,343
  • 2
  • 24
  • 41
  • does not work for me, I am using all placeholder, error, load. which version you are using? i tried with 4.12.0 and 4.8.0 – Brainwash Jul 07 '23 at 10:45
1

In addition to Ridhi's Answer:

For me to make it work properly I had to include isManifestParsingEnabled.

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

@GlideModule
public class MyGlideApp extends AppGlideModule {

    @Override
    public boolean isManifestParsingEnabled() {
        return false;
    }

}
Atiq
  • 14,435
  • 6
  • 54
  • 69
1

in build.gradle (app)

def glide_version = "4.11.0"
implementation ("com.github.bumptech.glide:glide:$glide_version"){
    exclude group: "com.android.support"
}
kapt "com.github.bumptech.glide:compiler:$glide_version"

in build.gradle (Project)

repositories {
    google()
    jcenter()
        ....
    maven { url 'https://maven.google.com' }
        ....
}

in your respective Class

import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.BitmapImageViewTarget

Glide.with(imageView.rootView.context)
.asBitmap()
.load("your url")
.into(object : BitmapImageViewTarget(imageView) {
     override fun setResource(resource: Bitmap?) {
         imageView.setImageBitmap(resource)
         super.setResource(resource)
     }
})
1

build.gradle

api("com.github.bumptech.glide:glide:4.9.0"){
    exclude group: "com.android.support"
}
kapt 'androidx.annotation:annotation:1.4.0'
kapt 'com.github.bumptech.glide:compiler:4.9.0'
implementation ("com.github.bumptech.glide:glide:4.9.0@aar") {
    transitive = true
}

CustomGlideApp

package com.example.android.common.modules;

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

@GlideModule
public class CustomGlideApp extends AppGlideModule { }

Make Project

Build > Make Project

Using

Observe that GlideApp (generated) is called and not the CustomGlideApp class.

import com.example.android.common.modules.GlideApp;

GlideApp.with()
Braian Coronel
  • 22,105
  • 4
  • 57
  • 62
0

I also had to face this type of issue like Failed to find GeneratedAppGlideModule. You should include an annotationProcessor compile dependency on com.github.bumptech.glide:compiler in your application and a @GlideModule annotated AppGlideModule implementation or LibraryGlideModules will be silently ignored.

I have fixed my issue after lots of time.

I made mistake in the XML file I had set the wrong height width of UIImageView that's why glide throw an error.

Please check UIImageView Height-Width Properly.

0

One more reason that this could happen is if you have migrated to KSP. Glide still doesn't support KSP.

K.R.
  • 312
  • 3
  • 16