我正在嘗試將Dagger 2添加到我的Android項目中。我想我理解到構建圖表的位置。那時我在黑暗中拍攝,那是我出錯的地方。
所有內容都會編譯,但運行時注入的字段爲空。無法使用匕首2注入職業
我試圖簡單地通過注入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() {
}
...
}
你不說什麼錯誤是,編譯時鍵入?空指針? ... – Blundell
對不起,注入的變量在運行時爲null。一切都很好。 – MrWizard54