使用改型android时,Dagger2在主要活动中出现问题
使用dagger2注入改装服务对象时,我面临一个问题。以下是我的场景的详细信息: 改装Web服务类别:使用改型android时,Dagger2在主要活动中出现问题,android,retrofit2,dagger-2,dagger,Android,Retrofit2,Dagger 2,Dagger,使用dagger2注入改装服务对象时,我面临一个问题。以下是我的场景的详细信息: 改装Web服务类别: public interface WebService { Observable<Name> searchName(@Query("id") String id); } @Module public class SetupModule {
public interface WebService {
Observable<Name> searchName(@Query("id") String id);
}
@Module
public class SetupModule {
@Provides
MainActivity provideWebService(WebService webService) {
return new MainActivity(webService);
}
}
@SetupScope
@Subcomponent(modules = SubModule.class)
public interface SubComponent {
MainActivity inject(MainActivity mainActivity);
}
@Singleton
@Component(modules = {
AppModule.class,
NetworkModule.class})
public interface AppComponent
{
SubComponent plus(SubModule subModule);
}
public SubComponent createSubComponent()
{
subComponent = appComponent.plus(new subModule());
return subComponent;
}
public MainActivity(WebService webService) {
this.webService = webService;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
((BaseApplication) getApplication()).createSubComponent().inject(this);
}
下面是子组件类:
public interface WebService {
Observable<Name> searchName(@Query("id") String id);
}
@Module
public class SetupModule {
@Provides
MainActivity provideWebService(WebService webService) {
return new MainActivity(webService);
}
}
@SetupScope
@Subcomponent(modules = SubModule.class)
public interface SubComponent {
MainActivity inject(MainActivity mainActivity);
}
@Singleton
@Component(modules = {
AppModule.class,
NetworkModule.class})
public interface AppComponent
{
SubComponent plus(SubModule subModule);
}
public SubComponent createSubComponent()
{
subComponent = appComponent.plus(new subModule());
return subComponent;
}
public MainActivity(WebService webService) {
this.webService = webService;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
((BaseApplication) getApplication()).createSubComponent().inject(this);
}
这里是AppComponent类:
public interface WebService {
Observable<Name> searchName(@Query("id") String id);
}
@Module
public class SetupModule {
@Provides
MainActivity provideWebService(WebService webService) {
return new MainActivity(webService);
}
}
@SetupScope
@Subcomponent(modules = SubModule.class)
public interface SubComponent {
MainActivity inject(MainActivity mainActivity);
}
@Singleton
@Component(modules = {
AppModule.class,
NetworkModule.class})
public interface AppComponent
{
SubComponent plus(SubModule subModule);
}
public SubComponent createSubComponent()
{
subComponent = appComponent.plus(new subModule());
return subComponent;
}
public MainActivity(WebService webService) {
this.webService = webService;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
((BaseApplication) getApplication()).createSubComponent().inject(this);
}
下面是BaseApplication类中的组件创建:
public interface WebService {
Observable<Name> searchName(@Query("id") String id);
}
@Module
public class SetupModule {
@Provides
MainActivity provideWebService(WebService webService) {
return new MainActivity(webService);
}
}
@SetupScope
@Subcomponent(modules = SubModule.class)
public interface SubComponent {
MainActivity inject(MainActivity mainActivity);
}
@Singleton
@Component(modules = {
AppModule.class,
NetworkModule.class})
public interface AppComponent
{
SubComponent plus(SubModule subModule);
}
public SubComponent createSubComponent()
{
subComponent = appComponent.plus(new subModule());
return subComponent;
}
public MainActivity(WebService webService) {
this.webService = webService;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
((BaseApplication) getApplication()).createSubComponent().inject(this);
}
这是主活动类:
public interface WebService {
Observable<Name> searchName(@Query("id") String id);
}
@Module
public class SetupModule {
@Provides
MainActivity provideWebService(WebService webService) {
return new MainActivity(webService);
}
}
@SetupScope
@Subcomponent(modules = SubModule.class)
public interface SubComponent {
MainActivity inject(MainActivity mainActivity);
}
@Singleton
@Component(modules = {
AppModule.class,
NetworkModule.class})
public interface AppComponent
{
SubComponent plus(SubModule subModule);
}
public SubComponent createSubComponent()
{
subComponent = appComponent.plus(new subModule());
return subComponent;
}
public MainActivity(WebService webService) {
this.webService = webService;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
((BaseApplication) getApplication()).createSubComponent().inject(this);
}
在尝试从MainActivity访问webservice接口中的searchName方法时,我收到了webservice nullpointerexception
请帮我找出为什么webservice对象会变为null?我认为,首先应该从活动构造函数中删除webservice,并启动类似这样的服务:
@Inject
WebService webService;
对于android中的活动和片段,构造函数注入是不可能的。你必须在野外注射时给出提示,在这种情况下我该怎么做?参考匕首2的任何指南,这是基本的匕首,看起来很有效。但是为什么我需要从活动构造函数中删除webservice呢。因为我通过子模块活动构造函数提供依赖关系。