2016-06-02 12 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 { 


} 

がここにあるのLoginModuleされるアクティビティコンポーネントここ

@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

である理由を理解することができませんが、私のスプラッシュプレゼンター

@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

loginComponentのインスタンスがinject method後に作成しています。

コンポーネント初期化子をカスタムアプリケーションクラスに移動します。またはSlashActivity

inject methodBaseActivityにコンポーネントの初期化子に移動して、あなたがコンポーネントのインターフェースでインスタンスを注入したいinject declarationそれぞれの活動を行います。

+0

それでも同じ問題を、この パブリック抽象クラスBaseActivity { @Override 保護され、ボイドのonCreate(バンドルsavedInstanceState){ super.onCreateを試してみました(savedInstanceState); initializeInjector(); this.getApplicationComponent()(これを)注入; }プライベートLoginComponent loginComponent; プライベートボイドinitializeInjector(){ this.loginComponent = DaggerLoginComponent.builder() .applicationComponent (アプリを取得.activityModule(getActivityModule()) .loginModule } – Signcodeindie

関連する問題