如何使用okhttp3
组合Glide和Stetho来调试图像加载系统我做了以下
1.增加了依赖性
//stetho
compile 'com.facebook.stetho:stetho:1.3.1'
compile 'com.facebook.stetho:stetho-okhttp3:1.3.1'
//glide
compile 'com.github.bumptech.glide:glide:3.7.0'
// Glide's OkHttp3 Integration
compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'
//okhttp3
compile 'com.squareup.okhttp3:okhttp:3.2.0'
1.新增了初始化
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Stetho.initialize(
Stetho.newInitializerBuilder(this)
.enableDumpapp(Stetho.defaultDumperPluginsProvider(this))
.enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this))
.build());
}
}
3.add glide config使用okhttp3
/**
* Created by Arnaud Camus Copied by MOMANI on 2016/04/15.
* http://arnaud-camus.fr/combining-glide-and-stetho-to-easily-debug-your-image-loading-system/
*/
public class StethoOkHttpGlideModule implements GlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) { }
@Override
public void registerComponents(Context context, Glide glide) {
okhttp3.OkHttpClient client = new okhttp3.OkHttpClient();
client.networkInterceptors().add(new com.facebook.stetho.okhttp3.StethoInterceptor());
glide.register(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(client));
}
}
4.在GlideModule
AndroidManifest.xml
元数据标记
<application
android:name=".....">
.....
<meta-data android:name="android.alcode.com.material.utils.glide.StethoOkHttpGlideModule"
android:value="GlideModule" />
</application>
5.Glide loadimg图像行
Glide.with(((ViewHolderSmall) holder).imageView.getContext())
.load(post.getImageUrl())
// .diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(((ViewHolderSmall) holder).imageView);
当我打开chrome开发人员工具Resources Tab
工作正常但network tab
没有!!!
为什么呢?我的错在哪里?是否建议将okhttp3
与Glide一起使用?以及如何在不使用okhttp3的情况下连接它
任何重复或链接都有帮助
答案 0 :(得分:5)
Re:建议在滑音时使用okhttp3吗?
是的,这是OkHttp集成的方法。
Re:为什么?我的错在哪里?
这可能是必需的,因为内置的GlideModule可能会覆盖您截获的客户端(GlideModule执行之间没有定义的顺序)。请从维基中考虑以下内容:
覆盖默认行为时,请确保在清单中注册了自定义GlideModule,并排除了默认行为。排除可能意味着从清单中删除相应的元数据或使用jar依赖项而不是aar。 - Overriding default behaviour - Glide Wiki
基于Conflicting GlideModules - Glide Wiki:从@aar
依赖项中删除okhttp3-integration
,或添加到清单:
<meta-data android:name="com.bumptech.glide.integration.okhttp3.OkHttpGlideModule" tools:node=”remove” />
另外请确保您不会被缓存欺骗:.diskCacheStrategy(NONE).skipMemoryCache(true)
;您可以在看到所需的请求后立即将其删除。
OkHttp3更改了API client.networkInterceptors()
不再可写:
okhttp3.OkHttpClient client = new okhttp3.OkHttpClient.Builder()
.addNetworkInterceptor(new com.facebook.stetho.okhttp3.StethoInterceptor())
.build();
答案 1 :(得分:1)
Re:如何在不使用okhttp3的情况下连接它
默认(内置)网络集成使用data-val
创建的HttpUrlFetcher
,因此为了与Stetho集成,您需要将其替换为拦截请求的那些。
“
HttpUrlGlideUrlLoader
确保@Override public void registerComponents(Context context, Glide glide) {
glide.register(GlideUrl.class, InputStream.class, new StethoHttpUrlGlideUrlLoader.Factory());
}
返回已修改的类,而不是StethoHttpUrlGlideUrlLoader
和build
中的内置类。
为简洁起见,此处仅包含结构差异,应明确这些行来自上下文的位置。完整代码可在GitHub上找到:
getResourceFetcher
答案 2 :(得分:0)
Finally it worked
according to Glide Wikis I changed the following
<application
android:name=".....">
.....
<meta-data android:name="android.alcode.com.material.utils.glide.StethoOkHttpGlideModule"
android:value="GlideModule" />
<meta-data android:name="com.bumptech.glide.integration.okhttp3.OkHttpGlideModule" tools:node="remove" />
</application>
and according to @TWiStErRob's Answer I changed the following
public class StethoOkHttpGlideModule implements GlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) { }
@Override
public void registerComponents(Context context, Glide glide) {
okhttp3.OkHttpClient client = new okhttp3.OkHttpClient.Builder()
.addNetworkInterceptor(new com.facebook.stetho.okhttp3.StethoInterceptor())
.build();
glide.register(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(client));
}
}
that's it
but some questions about okhttp3
not answered