Библиотека 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/