bumptech / glide

An image loading and caching library for Android focused on smooth scrolling
https://bumptech.github.io/glide/
Other
34.63k stars 6.12k forks source link

java.lang.AbstractMethodError for ModelLoaderFactory #1214

Closed ogtc890215 closed 8 years ago

ogtc890215 commented 8 years ago

Glide Version: 4.0.0-SNAPSHOT

Integration libraries: okhttp3-integration-2.0.0-SNAPSHOT

Device/Android Version: Nexus 5X Android 6.0

Issue details / Repro steps / Use case background:

Glide load line / GlideModule (if any) / list Adapter code (if any):

mFullRequest = requestManager
        .asDrawable()
        .apply(RequestOptions.centerCropTransform(getActivity())
                .placeholder(new ColorDrawable(Color.GRAY)));
mFullRequest.load(photo.getGlideUrl())
            .thumbnail(mThumbnailRequest.load(photo.getGlideUrl()))
            .into(holder.photo);

Reuse a global okhttp client

public class GlobalOkHttpGlideModule extends OkHttpGlideModule {
    @Override
    public void registerComponents(Context context, Registry registry) {
        registry.replace(GlideUrl.class, InputStream.class,
                new OkHttpUrlLoader.Factory(NetworkModule.get().getHttpClient()));
    }

Register the module in AndroidManifest.xml:

<meta-data
            android:name="com.xfjr.happyfamily.network.GlobalOkHttpGlideModule"
            android:value="GlideModule" />

Gradle dependencies:

+--- com.android.support:support-v4:23.4.0
|    \--- com.android.support:support-annotations:23.4.0
+--- com.android.support:appcompat-v7:23.4.0
|    +--- com.android.support:animated-vector-drawable:23.4.0
|    |    \--- com.android.support:support-vector-drawable:23.4.0
|    |         \--- com.android.support:support-v4:23.4.0 (*)
|    +--- com.android.support:support-v4:23.4.0 (*)
|    \--- com.android.support:support-vector-drawable:23.4.0 (*)
+--- com.android.support:recyclerview-v7:23.4.0
|    +--- com.android.support:support-annotations:23.4.0
|    \--- com.android.support:support-v4:23.4.0 (*)
+--- com.android.support:cardview-v7:23.4.0
+--- com.android.support:gridlayout-v7:23.4.0
|    \--- com.android.support:support-v4:23.4.0 (*)
+--- com.android.support:design:23.4.0
|    +--- com.android.support:recyclerview-v7:23.4.0 (*)
|    +--- com.android.support:appcompat-v7:23.4.0 (*)
|    \--- com.android.support:support-v4:23.4.0 (*)
+--- com.github.bumptech.glide:glide:4.0.0-SNAPSHOT
|    +--- com.github.bumptech.glide:gifdecoder:1.0.0-SNAPSHOT
|    |    \--- com.android.support:support-annotations:22.2.0 -> 23.4.0
|    \--- com.github.bumptech.glide:disklrucache:1.0.0-SNAPSHOT
+--- com.github.bumptech.glide:recyclerview-integration:2.0.0-SNAPSHOT
|    \--- com.github.bumptech.glide:glide:4.0.0-SNAPSHOT (*)
+--- com.github.bumptech.glide:okhttp3-integration:2.0.0-SNAPSHOT
+--- com.squareup.okhttp3:okhttp-android-support:3.2.0
|    \--- com.squareup.okhttp3:okhttp-urlconnection:3.2.0
|         \--- com.squareup.okhttp3:okhttp:3.2.0
|              \--- com.squareup.okio:okio:1.6.0
+--- com.squareup.okhttp3:okhttp:3.2.0 (*)
+--- io.reactivex:rxjava:1.1.5
+--- io.reactivex:rxandroid:1.2.0
|    \--- io.reactivex:rxjava:1.1.4 -> 1.1.5
\--- com.belerweb:pinyin4j:2.5.1

Stack trace / LogCat:

java.lang.AbstractMethodError: abstract method "com.bumptech.glide.load.model.ModelLoader com.bumptech.glide.load.model.ModelLoaderFactory.build(android.content.Context, com.bumptech.glide.load.model.MultiModelLoaderFactory)"
     at com.bumptech.glide.load.model.MultiModelLoaderFactory.build(MultiModelLoaderFactory.java:161)
     at com.bumptech.glide.load.model.MultiModelLoaderFactory.build(MultiModelLoaderFactory.java:92)
     at com.bumptech.glide.load.model.ModelLoaderRegistry.getModelLoadersForClass(ModelLoaderRegistry.java:84)
     at com.bumptech.glide.load.model.ModelLoaderRegistry.getModelLoaders(ModelLoaderRegistry.java:60)
     at com.bumptech.glide.Registry.getModelLoaders(Registry.java:220)
     at com.bumptech.glide.load.engine.DecodeHelper.getLoadData(DecodeHelper.java:180)
     at com.bumptech.glide.load.engine.DecodeHelper.getCacheKeys(DecodeHelper.java:198)
     at com.bumptech.glide.load.engine.DataCacheGenerator.<init>(DataCacheGenerator.java:34)
     at com.bumptech.glide.load.engine.DecodeJob.getNextGenerator(DecodeJob.java:258)
     at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:239)
     at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:218)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
     at java.lang.Thread.run(Thread.java:818)
     at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:263)

I have no idea how to solve the exception, could you help please?

ogtc890215 commented 8 years ago

I found 'ModelLoaderFactory' has changed the method 'build' , added 'context' as a new parameter, I try to implement the new 'ModelLoaderFactory' by myself, and the issue fixed. Does it have an impact on other situation?

public static class Factory implements ModelLoaderFactory<GlideUrl, InputStream> {

    private OkHttpClient mClient;

    Factory(OkHttpClient client) {
        mClient = client;
    }

    @Override
    public ModelLoader<GlideUrl, InputStream> build(Context context,
            MultiModelLoaderFactory multiModelLoaderFactory) {
        return new OkHttpUrlLoader(mClient);
    }

    @Override
    public void teardown() {

    }
}
TWiStErRob commented 8 years ago

The dependencies look perfectly ok, I suggest you remove that custom factory and do a clean build.

I tried to repro (see above commit), but couldn't. What is mThumbnailRequest?

I would also suggest implementing GlideModule from scratch instead of extending OkHttpGlideModule, it's more clean that way.

TWiStErRob commented 8 years ago
p:\projects\contrib\github-glide-support>gradlew dependencies --configuration glide4Compile

glide4Compile - Classpath for compiling the glide4 sources.
+--- com.github.bumptech.glide:glide:4.0.0-SNAPSHOT
|    +--- com.github.bumptech.glide:disklrucache:1.0.0-SNAPSHOT
|    \--- com.github.bumptech.glide:gifdecoder:1.0.0-SNAPSHOT
|         \--- com.android.support:support-annotations:22.2.0
+--- com.github.bumptech.glide:recyclerview-integration:2.0.0-SNAPSHOT
+--- com.github.bumptech.glide:okhttp3-integration:2.0.0-SNAPSHOT
|    +--- com.squareup.okhttp3:okhttp:3.0.1 -> 3.2.0
|    |    \--- com.squareup.okio:okio:1.6.0
|    \--- com.github.bumptech.glide:glide:4.0.0-SNAPSHOT (*)
+--- com.squareup.okhttp3:okhttp:3.2.0 (*)
+--- com.github.bumptech.glide:volley-integration:2.0.0-SNAPSHOT
|    +--- com.mcxiaoke.volley:library:1.0.16 -> 1.0.19
|    \--- com.github.bumptech.glide:glide:4.0.0-SNAPSHOT (*)
\--- com.mcxiaoke.volley:library:1.0.19

(*) - dependencies omitted (listed previously)
devilabhi commented 6 years ago

I am also facing this issue in glide 4.4 and I have mentioned this issue here