Библиотека Facebook Stetho не работает для проверки пользовательского интерфейса

Мой проект правильно настроен на использование Stetho. И это работало ранее.

Но теперь, когда я проверяю свое приложение на предмет проверки пользовательского интерфейса (раздел Элементы), оно не работает. В то время как другие части работают, такие как Ресурсы.
Также DevTools показывает экран моего приложения, но раздел Элементы пуст. Я не знал, какие изменения отключили stetho Elements.

Есть ли конфликт между Stetho и Chrome? Если да, то какие версии совместимы? В настоящее время я использую stehto 1.4.2 и chrome v55.
Любое решение будет оценено. Заранее спасибо.

1 ответ

Чтобы реализовать шаблон проектирования Singleton для 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, запустите свое приложение и откройте Google Chrome и введите chrome://inspect/

Другие вопросы по тегам