web-dev-qa-db-ja.com

Glide4でGlideModuleを使用する方法

最近、正確にはGlide 4を使用するようにアプリを更新しました。Glide4.2.0です。グラドル:

compile 'com.github.bumptech.glide:glide:4.2.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.2.0'
compile ('com.github.bumptech.glide:okhttp3-integration:4.2.0'){
    exclude group: 'glide-parent'
}

マニフェストで:

<meta-data
            Android:name="com.xxx.MyGlideModule"
            Android:value="GlideModule"/>

GlideModuleクラス:

@GlideModule
public class MyGlideModule extends AppGlideModule {

    @Override
    public void registerComponents(Context context, Glide glide, Registry registry) {
        OkHttpClient client = new OkHttpClient.Builder()
                .readTimeout(30, TimeUnit.SECONDS)
                .writeTimeout(30, TimeUnit.SECONDS)
                .connectTimeout(30, TimeUnit.SECONDS)
                .build();

        OkHttpUrlLoader.Factory factory = new OkHttpUrlLoader.Factory(client);

        glide.getRegistry().replace(GlideUrl.class, InputStream.class, factory);
    }
}

アダプター内でグライドを使用する方法:

        RequestOptions myOptions = new RequestOptions()
                .placeholder(R.drawable.ic_placeholder)
                .diskCacheStrategy(DiskCacheStrategy.NONE)
                .dontAnimate()
                .skipMemoryCache(true)
                ;

        Glide.with(mContext)
                .load(Imageid[position])
                .apply(myOptions)
                .into(imageView);

これらのコードで実行すると、エラーが発生しました。

Java.lang.RuntimeException: Expected instanceof GlideModule, but found: [my app package].MyGlideModule@d1c2328
  at com.bumptech.glide.module.ManifestParser.parseModule(ManifestParser.Java:81)
  at com.bumptech.glide.module.ManifestParser.parse(ManifestParser.Java:43)
  at com.bumptech.glide.Glide.initializeGlide(Glide.Java:193)
  at com.bumptech.glide.Glide.checkAndInitializeGlide(Glide.Java:172)
  at com.bumptech.glide.Glide.get(Glide.Java:156)
  at com.bumptech.glide.Glide.getRetriever(Glide.Java:540)
  at com.bumptech.glide.Glide.with(Glide.Java:566)
  at [adapter line where I implement Glide]

myGlideModuleはどのように使用できますか?

11
Dika

Glide 4.0は必要ありませんAndroidManifest.xmlで「GlideModule」を宣言しています。あなただけの手順に従う必要があります:

  1. YourGlideModule extends AppGlideModuleYourGlideModuleクラスの関数applyOptionsをオーバーライドできます。
  2. 「Androidスタジオ->ビルド->プロジェクトの作成」でプロジェクトを作成する必要があります。これにより、GlideAppクラスが生成されます。
  3. GlideApp.with(this).load(imgUrl).into(glide_test_iv1)などのGlideAppを使用します
33
kevin

GlideAppを生成できない場合-

build.gradle依存関係annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'

UnsafeOkHttpGlideModuleAppGlideModulemeta-dataAndroid:value=""Android:value="AppGlideModule"

0
brady lee