如何设置OkHttpClient进行滑行

use*_*930 22 android android-glide

我正在使用Glide加载图像,我面临的问题是,当我在慢速互联网连接上运行应用程序时,我得到了SocketTimeOutException.所以要解决这个问题,我想使用自定义,OkHttpClient以便我可以更改HttpClient的超时,这是我的代码.

public class MyGlideModule  implements GlideModule {
    @Override
    public void applyOptions(Context context, GlideBuilder builder) {

    }

    @Override
    public void registerComponents(Context context, Glide glide) {
        OkHttpClient client = new OkHttpClient();
        client.setConnectTimeout(15, TimeUnit.SECONDS);
        client.setReadTimeout(15,TimeUnit.SECONDS);
        OkHttpUrlLoader.Factory factory = new OkHttpUrlLoader.Factory(client);
        glide.register(GlideUrl.class, InputStream.class, factory);
    }
}
Run Code Online (Sandbox Code Playgroud)

OkHttpUrlLoaderGlide API中已经没有了.所以我想知道如何设置OkHttpClient for Glide

Ami*_*ati 40

因为滑行4.0.0它已经改变了一点点.

首先,GlideModule不推荐使用,AppGlideModule如果您正在开发应用程序和LibraryGlideModule进行库开发,则需要使用它.你需要@GlideModule在你的自定义AppGlideModule类之上使用.

其次register(),Glide对象中没有方法.

最后okhttp3将使用一个构建器.

应用程序如下所示:

    @GlideModule
    private class CustomGlideModule extends AppGlideModule {

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

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

           glide.getRegistry().replace(GlideUrl.class, InputStream.class, factory);
       }
   }
Run Code Online (Sandbox Code Playgroud)

您需要将所有这些依赖项与应用程序gradle文件中的确切版本相关联:

 compile "com.squareup.okhttp3:okhttp:3.8.1"
    compile 'com.github.bumptech.glide:glide:4.0.0'
    compile ('com.github.bumptech.glide:okhttp3-integration:4.0.0'){
        exclude group: 'glide-parent'
    }
Run Code Online (Sandbox Code Playgroud)

  • 除了在connecttimeout行末尾缺少.build()之外,它对我有用. (3认同)

ume*_*k44 17

要使用OkHttpUrlLoader,您需要添加依赖项,如@darwin所说,但存在依赖性问题https://github.com/bumptech/glide/issues/941.因此,您将在依赖项中添加此项

 compile ('com.github.bumptech.glide:okhttp3-integration:1.4.0'){
        exclude group: 'glide-parent'
    }
Run Code Online (Sandbox Code Playgroud)

  • 如果执行此操作,它将找不到OkHttpUrlLoader (2认同)

Fre*_*ula 10

根据docs,这是正确的最新方法:

@GlideModule
@Excludes(OkHttpLibraryGlideModule::class)
class MyGlideModule : AppGlideModule() {

  override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
    registry.replace(
      GlideUrl::class.java,
      InputStream::class.java,
      OkHttpUrlLoader.Factory(myOkHttpClient)
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

您将需要所有这些依赖项:

implementation 'com.github.bumptech.glide:glide:4.12.0'
kapt 'com.github.bumptech.glide:compiler:4.12.0'
implementation 'com.github.bumptech.glide:okhttp3-integration:4.12.0'
Run Code Online (Sandbox Code Playgroud)