Facebook Stetho库不适用于检查UI

时间:2016-12-19 13:10:58

标签: android facebook debugging stetho

我的项目已正确配置为使用Stetho。它以前工作。

但现在,当我检查我的应用程序进行UI检查(元素部分)时,它不起作用。虽然其他部分可以工作,例如资源。
另外DevTools显示我的应用程序的屏幕但元素部分是空的。我不知道哪个更改禁用了stetho Elements。

Stetho和Chrome之间是否存在冲突?如果是这样,哪些版本兼容?目前我使用stehto 1.4.2和chrome v55 任何解决方案将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

为了实现Retrofit的单例设计模式以及Stetho Network Interceptor实例,请参阅以下代码:

public class ApiClient extends Application {

    private static ApiClient apiClient = null; //singleton Object
    String apiURL = "http://your.url/";


    public static ApiClient getApiClient() {//getter for object
        if (apiClient == null)
            apiClient = new ApiClient();
        return apiClient;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Stetho.initializeWithDefaults(this);
    }

    public Retrofit getClient() {//Retrofit instance
        int myTime = 15;
        OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder()
                .connectTimeout(myTime, TimeUnit.SECONDS)
                .readTimeout(myTime, TimeUnit.SECONDS)
                .writeTimeout(myTime, TimeUnit.SECONDS)
                .addNetworkInterceptor(new StethoInterceptor());

        Retrofit.Builder builder = new Retrofit.Builder()
                .baseUrl(apiURL)
                .client(okHttpBuilder.build())
                .addConverterFactory(GsonConverterFactory.create());
        return builder.build();
    }
}

现在使用改造请参阅以下代码:

LoginDTO loginDTO = new LoginDTO(
            etPhno.getText().toString().trim(),
            etPass.getText().toString().trim()
    );

ApiService service = ApiClient.getApiClient().getClient().create(ApiService.class);
Call<LoginResp> call = service.loginAPI(loginDTO);
call.enqueue(new Callback<LoginResp>() {

    @Override
    public void onResponse(Call<LoginResp> call, Response<LoginResp> response) {

        LoginResp loginResp = response.body();

    }

    @Override
    public void onFailure(Call<LoginResp> call, Throwable t) {

        Toast.makeText(Login.this, "Error here", Toast.LENGTH_SHORT).show();
    }
});

在ApiService接口中声明如下函数:

    @POST("login")
    Call<LoginResp> loginAPI(@Body LoginDTO loginDTO);

LoginDTO类是这样的:

public class LoginDTO {
    @SerializedName("log_phno")
    @Expose
    private String user;

    @SerializedName("log_pass")
    @Expose
    private String pass;

    public LoginDTO(String user, String pass) {
        this.user = user;
        this.pass = pass;
    }

    public String getUser() {
        return user;
    }

    public String getPass() {
        return pass;
    }
}

现在最重要的部分,转到清单文件,在<application>标记下,将您的单例类名称前面加一个点(。),如下所示:

android:name=".Controller.ApiClient"

了解Stetho Interceptor的魔力,运行你的应用并打开谷歌浏览器并输入chrome://inspect/