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

时间:2016-04-15 08:29:56

标签: android debugging android-glide okhttp3 stetho

如何使用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的情况下连接它

任何重复或链接都有帮助

3 个答案:

答案 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集成,您需要将其替换为拦截请求的那些。 “

GlideModule

HttpUrlGlideUrlLoader

确保@Override public void registerComponents(Context context, Glide glide) { glide.register(GlideUrl.class, InputStream.class, new StethoHttpUrlGlideUrlLoader.Factory()); } 返回已修改的类,而不是StethoHttpUrlGlideUrlLoaderbuild中的内置类。

自定义提取程序

为简洁起见,此处仅包含结构差异,应明确这些行来自上下文的位置。完整代码可在GitHub上找到:

getResourceFetcher

example

答案 2 :(得分:0)

Finally it worked
network inspection 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