9

Stetho 的一切都在我通过这个YouTube 教程(SQLite,SharedPreferences 显示)后测试的示例应用程序中运行良好,除了看到我很想开始工作的网络调用。

加载应用程序时,我正在进行大量 API 调用。例如,在我的Service.java类中,如下链接所示。也许它没有出现在 Stetho 中,因为 API 调用发生在应用程序在 Stetho 可以打开之前加载时发生。任何想法将不胜感激以使此功能正常工作。

我在 MainActivity.java 中初始化 Stetho。在onCreate()我有

    // Initialize Stetho
    Stetho.initialize(
            Stetho.newInitializerBuilder(this)
                    .enableDumpapp(new SampleDumperPluginsProvider(this))
                    .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this))
                    .build());

然后我还在底部添加了一个 Stetho类。

// Create class for Stetho
private static class SampleDumperPluginsProvider implements DumperPluginsProvider {
    private final Context mContext;

    public SampleDumperPluginsProvider(Context context){mContext = context;}

    @Override
    public Iterable<DumperPlugin> get() {
        ArrayList<DumperPlugin> plugins = new ArrayList<>();
        for (DumperPlugin defaultPlugin : Stetho.defaultDumperPluginsProvider(mContext).get()) {
            plugins.add(defaultPlugin);
        }
        //plugins.add(new SyncAdapterFragment());
        return plugins;
    }
}

当然我也有适当的依赖

compile 'com.facebook.stetho:stetho:1.3.0'

谢谢!</p>

4

1 回答 1

10

我在丢失早期网络调用时遇到了同样的问题,但是有一种简单的方法可以使用简单的断点查看所有调用,因为您可以连接到“暂停”的应用程序:

  • 只需在调试中运行您的应用程序并在您的第一个网络调用之前放置一个断点(例如,在您的应用程序的 onCreate 中的某个位置,但当然是在 Stetho 初始化之后:-)
  • 打开 Chrome (chrome://inspect/#devices),您应该会看到您的 Android 应用程序(此时它正在等待断点)
  • 只需单击“检查”,开发工具就会打开。
  • 如果未选择,请选择网络选项卡
  • 单击调试窗口中的“恢复”按钮(不是“运行”按钮!)

-> 您现在应该可以看到所有(网络)呼叫(当然,如果 Stetho 已正确集成)

  • 我只在我的设备上试过这个,不确定模拟器的行为是否相同

  • 您的 Stetho init 是正确的,我使用了相同的构造。

  • 要查看网络调用,您需要在您的 http 客户端中添加一个“StethoInterceptor()”。我刚开始使用 Android,所以我无法立即告诉您如何在您的代码中执行此操作,但这是我在 Retrofit 2 (2.0.0-beta4) 中插入 Stetho (1.3.1) 的方法

    // add a Facebook StethoInterceptor to the OkHttpClient's list of network interceptors
    OkHttpClient okClient = new OkHttpClient.Builder()
            .addNetworkInterceptor(new StethoInterceptor())
            .build();
    
    mRetrofit = new Retrofit.Builder()
            .client(okClient)
            .baseUrl(BASE_URL)
            .build();
    
于 2016-03-12T20:58:34.887 回答