Я пытаюсь добавить Dagger 2 в свой проект Android. Я думаю, что понимаю концепции вплоть до того момента, когда я строю график. В этот момент я стреляю в темноте, и здесь я ошибаюсь.
Все компилируется, но введенное поле пусто во время выполнения.
Я пытаюсь начать просто с внедрения Presenter в мою MainActivity. Я написал следующий код и был бы признателен за помощь в выяснении того, где я ошибся.
Мой PresenterModule.java:
@Module
public class PresenterModule {
@Provides MainActivityPresenter providesMainActivityPresenter() {
return new DefaultMainActivityPresenter();
}
}
Мой класс приложения, который также включает мой компонент, следующий за кодом примера Dagger2:
public class App extends Application {
private PresenterComponent component;
@Singleton
@Component(modules = PresenterModule.class)
public interface PresenterComponent {
void inject(App app);
void inject(MainActivity activity);
}
@Override public void onCreate() {
Log.d("App.java", "Starting Application");
super.onCreate();
component = DaggerApp_PresenterComponent.builder()
.presenterModule(new PresenterModule())
.build();
component.inject(this);
}
public PresenterComponent component() {
return component;
}
}
И, наконец, мой MainActivity.
public class DefaultMainActivity
extends ActionBarActivity
implements MainActivity
{
@Inject MainActivityPresenter mPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((App)getApplication()).component().inject(this);
mPresenter.getCurrentDetailLineNumber();
setContentView(R.layout.base_layout);
getSupportActionBar();
mContainer = (Container) findViewById(R.id.container);
mPresenter.requestCurrentScreen();
}
Фактический объект, который необходимо внедрить, является реализацией интерфейса, но в остальном является объектом POJO:
public class DefaultMainActivityPresenter implements MainActivityPresenter {
private static final int SCREEN_BROWSER = 0;
private static final int SCREEN_DETAIL = 1;
LineNumber mCurrentDetailLineNumber;
int mCurrentScreen;
@Inject
public DefaultMainActivityPresenter() {
}
...
}