2016-06-02 4 views
0

Splash Presenter가 null로 반환 된 이유를 이해하는 데 도움이 필요합니다. 나는 깨끗한 건축을 따르고있다.단검 2 : 발표자가 null

public class SplashActivity extends BaseActivity implements HasComponent<LoginComponent> { 

    @Inject 
    SplashPresenter splashPresenter; 

    private LoginComponent loginComponent; 


    @Override protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
     //setContentView(R.layout.spla); 

     this.initializeInjector(); 
     if (savedInstanceState == null) { 
      // addFragment(R.id.fragmentContainer, new UserListFragment()); 
     } 

     splashPresenter.initialize(); 
    } 

    private void initializeInjector() { 
     this.loginComponent = DaggerLoginComponent.builder() 
       .applicationComponent(getApplicationComponent()) 
       .activityModule(getActivityModule()) 
       .loginModule(new LoginModule()) 
       .build(); 
    } 

    @Override 
    public LoginComponent getComponent() { 
     return loginComponent; 
    } 
} 

내 활동에 SplashPresenter는 항상 null입니다. 여기

@Module 
public class LoginModule { 

    private User user; 

    public LoginModule(){} 

    public LoginModule(User user){this.user = user;} 

    @Provides 
    LoginRepository provideLoginRepository(LoginDataRepository loginRepository) { 
    return loginRepository; 
    } 


    @Provides 
    @PerActivity 
    @Named("isUserLoggedIn") 
    UseCase provideIsUserLoggedInUseCase(IsUserLoggedIn isUserLoggedIn){ 
     return isUserLoggedIn; 
    } 

    @Provides 
    @PerActivity 
    @Named("login") 
    UseCase provideLoginUseCase(LoginRepository loginRepository, ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread){ 
     return new Login(user,loginRepository,threadExecutor,postExecutionThread); 
    } 

    @Provides 
    @PerActivity 
    @Named("logOut") 
    UseCase provideLogoutUseCase(LoginRepository loginRepository, ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread){ 
     return new LogOut(user,loginRepository,threadExecutor,postExecutionThread); 
    } 
} 

BaseActivity에서 내가

를 다음을 수행하고 내 LoginComponent

@PerActivity 
    @Component(dependencies = ApplicationComponent.class, modules = {ActivityModule.class, LoginModule.class}) 
    public interface LoginComponent extends ActivityComponent { 


} 

가 여기에 로그인 모듈하는 활동 구성 요소 여기

@PerActivity 
@Component(dependencies = ApplicationComponent.class, modules = ActivityModule.class) 
public interface ActivityComponent { 
    //Exposed to sub-graphs. 
    Activity activity(); 
} 

@Module 
public class ActivityModule { 
    private final Activity activity; 

    public ActivityModule(Activity activity) { 
    this.activity = activity; 
    } 

    /** 
    * Expose the activity to dependents in the graph. 
    */ 
    @Provides @PerActivity Activity activity() { 
    return this.activity; 
    } 
} 

입니다

SplashActivity

내 발표자 널 왜

아직도 나는 여기에 내 스플래쉬 발표자

loginComponent의 인스턴스가 inject method 후 생성
@PerActivity 
public class SplashPresenter implements Presenter { 

    private final UseCase isUserLoggedIn; 

    private SplashView splashView; 

    @Inject 
    public SplashPresenter(@Named("isUserLoggedIn") UseCase isUserLoggedIn) { 
     this.isUserLoggedIn = isUserLoggedIn; 
    } 
} 
+1

해결 방법을 찾으셨습니까? 여기에 같은 문제 :(성공적으로 문제를 해결할 수 있다면 – Zain

+0

해결책을 게시하시기 바랍니다. – Talha

답변

0

이해 드릴 수 없습니다.

구성 요소 초기화 프로그램을 사용자 지정 응용 프로그램 클래스로 이동하십시오. 또는 SlashActivity

BaseActivity, inject method에 구성 요소를 초기화로 이동 그리고 당신은 당신이 구성 요소 인터페이스에서 인스턴스를 주입 할 inject declaration 각 활동을합니다.

+0

여전히 같은 문제는이 공공 추상 클래스 BaseActivity { @Override 보호 무효에서 onCreate (번들 savedInstanceState) { super.onCreate 시도 (savedInstanceState) initializeInjector(). this.getApplicationComponent() (이)를 삽입; } 전용 LoginComponent loginComponent; 개인 무효 initializeInjector() { this.loginComponent DaggerLoginComponent.builder =() .applicationComponent (getApp.activityModule (getActivityModule()) .loginModule (새 LoginModule()) .build(); } – Signcodeindie

관련 문제