Intereting Posts
android.hardware.Camera $ EventHandler.handleMessage Как узнать, что приложение установлено из игры Google или боковой загрузки? NoSuchMethodError, если я использую okhttp 2.0 и последнюю модификацию? Как исправить URL-адрес поставщика контента, который не найден в поставщике контента Android? Ошибка "validate_display: 255 error 3008 (EGL_BAD_DISPLAY)" от Toutorial Измените тему деятельности программы Как установить индикатор прогресса Android в центре экрана Как очистить SurfaceTexture после использования с MediaPlayer? NoClassDefFoundError при использовании кинжала 2 после перехода на Android Studio 2.0 RunOnUiThread (новый Runnable () {}) не определен для типа new Thread () {} Как добавить выпадающее меню рядом с полем поиска в Android? Ошибка использования RecyclerView: у указанного дочернего элемента уже есть родительский элемент Воспроизвести плейлист с MediaPlayer Как рисовать кривую через точки дерева в Android? Android-мобиль не обнаруживает беспроводную сеть, созданную на моем ноутбуке

Создание элемента MembersInjector для . Предпочитают вместо этого запускать процессор кинжала над этим классом

У меня есть эти предупреждения, и я не понимаю, что они означают. Может ли кто-то мне что-то сказать?

Для классов, которые я вставляю в (где есть оператор component.inject(this) )

 Note: Generating a MembersInjector for [class] Prefer to run the dagger processor over that class instead. 

Для объекта я закачиваю (constuctor, аннотированный с помощью @Inject )

 Note: Generating a Provider for [class]. Prefer to run the dagger processor over that class instead. 

Solutions Collecting From Web of "Создание элемента MembersInjector для . Предпочитают вместо этого запускать процессор кинжала над этим классом"

Когда процессор аннотаций Dagger запускается, он генерирует два типа классов:

  1. Реализации интерфейсов @Component
  2. Provider и MembersInjector для каждого типа @Inject 'd.

Хотя он @Component реализацию интерфейса @Component , он соединяет каждую из реализаций Provider и MembersInjector соответствии с настройками ваших модулей. Если ваш компонент или любой из модулей в нем ссылаются на @Inject 'd, который был скомпилирован без процессора Dagger, он все равно будет генерировать Provider или MembersInjector , но один раз для каждого компонента, а не для класса @Inject ' d.

Это не проблема (следовательно, это не предупреждение или ошибка), но это означает, что потенциально возможно, что процессор Dagger будет генерировать одни и те же классы много раз для одного приложения. Это может замедлить компиляцию, если и займет немного больше байт-кода, если он действительно выходит из-под контроля.

Простое исправление заключается в том, чтобы убедиться, что вы используете обработчик аннотаций Dagger при компиляции типов @Inject 'd, а также ваших компонентов.

Я получал это предупреждение "Generating a MembersInjector for..." Dagger 2, когда у меня был суперкласс и подкласс следующим образом …

 public abstract class BaseActivity extends Actvity { @Inject DependencyA dependencyA; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ((MyApplication) getApplication()).getComponent().inject(this); } public class ConcreteActivity extends BaseActvity { @Inject DependencyB dependencyB; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ((MyApplication) getApplication()).getComponent().inject(this); } } 

… и мой интерфейс Component имел два метода впрыска следующим образом …

 void inject(BaseActivity activity); void inject(ConcreteActivity activity); 

Я удалил метод inject(BaseActivity activity) из моего интерфейса Component и я удалил вызов метода Component.inject(this) из класса BaseActivity . Инъекция в BaseActivity прежнему работает так, как ожидается, когда подкласс ( ConcreteActivity ) вызывает Component.inject(this) и я больше не вижу предупреждения "Generating a MembersInjector for..." Dagger 2 при создании приложения.