使用Glide和okhttp3在Stetho中进行网络检查

Bas*_*ANI 2 debugging android android-glide stetho okhttp3

如何结合Glide和Stetho使用okhttp3调试图像加载系统

我做了以下

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'
Run Code Online (Sandbox Code Playgroud)

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

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));
    }
}
Run Code Online (Sandbox Code Playgroud)

4.添加GlideModule元数据标签AndroidManifest.xml

<application 
    android:name=".....">
    .....
     <meta-data android:name="android.alcode.com.material.utils.glide.StethoOkHttpGlideModule"
      android:value="GlideModule" />
</application>
Run Code Online (Sandbox Code Playgroud)

5.Glide loadimg图像线

Glide.with(((ViewHolderSmall) holder).imageView.getContext())
                    .load(post.getImageUrl())
            //        .diskCacheStrategy(DiskCacheStrategy.SOURCE)
                    .into(((ViewHolderSmall) holder).imageView);
Run Code Online (Sandbox Code Playgroud)

当我打开chrome开发工具Resources Tab工作完美,但network tab没有!

为什么?我的错在哪里?是否建议okhttp3与Glide 一起使用?以及如何在不使用okhttp3的情况下连接它

任何重复或链接都会有所帮助

TWi*_*Rob 5

Re:建议在滑音时使用okhttp3吗?

是的,这是OkHttp集成的方法.

回复:为什么?我的错在哪里?

这可能是需要的,因为内置的GlideModule可能会覆盖您截获的客户端(GlideModule执行之间没有定义的顺序).从维基中考虑以下内容:

覆盖默认行为时,请确保在清单中注册了自定义GlideModule,并排除了默认行为.排除可能意味着从清单中删除相应的元数据或使用jar依赖项而不是aar.- 覆盖默认行为 - Glide Wiki

基于冲突GlideModules - Glide Wiki:@aarokhttp3-integration依赖中删除,或添加到清单:

<meta-data android:name="com.bumptech.glide.integration.okhttp3.OkHttpGlideModule" tools:node=”remove” />
Run Code Online (Sandbox Code Playgroud)

另外,还要确保你不被愚弄缓存:.diskCacheStrategy(NONE).skipMemoryCache(true); 您可以在看到请求后立即将其删除.


OkHttp3改变了API client.networkInterceptors()不再可写:

okhttp3.OkHttpClient client = new okhttp3.OkHttpClient.Builder()
            .addNetworkInterceptor(new com.facebook.stetho.okhttp3.StethoInterceptor())
            .build();
Run Code Online (Sandbox Code Playgroud)